Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Textbox an Sub übergeben

Textbox an Sub übergeben
11.06.2018 21:35:31
Jan
Liebe Excel-Götter,
ich stehe mal wieder vor einer banalen Aufgabe, die vermeintlich doch schnell gelöst sein sollte. Vermutlich stelle ich mich wieder mal zu doof an...
In meinem VBA-Projekt habe ich etliche Combo- und Textboxen. Nun sollen diese je nach Eingabe des Anwenders disabled oder enabled werden. Spätestens beim dritten Mal denk ich mir, kann ich doch ein Sub draus machen. Für Comboboxen funktioniert das auch problemlos:

Sub DisableListBoxes(TargetList As ComboBox)
With TargetList
.Enabled = False
.BackColor = Functions.RGBCode("inactive")
End With
End Sub
Aufruf:

Call DisableListBoxes(Combobox)
Naiv wie ich bin, dachte ich mir, das geht doch mit Textboxen sicher genauso:

Sub DisableListBoxes(TargetBox As TextBox)
With TargetBox
.Enabled = False
.BackColor = Functions.RGBCode("inactive")
End With
End Sub
Beim Auruf kommt es jedoch immer zu der Meldung 'Typen unverträglich'. Führe ich dagegen den Code direkt in der UserForm aus, dann meckert Excel nicht (so wie hier):

With TxtBox
.Enabled = False
.BackColor = Functions.RGBCode("inactive")
End With
Habt ihr eine Idee, warum ich die Textbox nicht an ein Sub weitergeben kann, das diesen immer wieder durchzuführenden Code übernimmt?
Vielen Dank und Gruß, Jan
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textbox an Sub übergeben
11.06.2018 23:34:15
Mullit
Hallo,
das Objekt ist nicht eindeutig, besser gesagt mit Deiner Notation hast Du die Formular-Textbox am Wickel, Du mußt auf die Forms-Bibliothek zugreifen:
Sub DisableListBoxes(TargetBox As MSForms.TextBox)
    With TargetBox
        .Enabled = False
        .BackColor = Functions.RGBCode("inactive")
    End With
End Sub

Gruß, Mullit
Anzeige
AW: Textbox an Sub übergeben
12.06.2018 00:02:40
Daniel
Hi
wenn du in einer Userform arbeitest, dann kannst du als Übergabeparameter auch den Typ "Control" verwenden. Dann kannst du das gleiche Makro Textbox, Combobox und weitere Controls verwenden, du musst halt nur darauf achten, dass du nur Eigenschaften änderst, die für alle Controls gültig sind:

Private Sub CommandButton1_Click()
Call ControlAus(ComboBox1)
Call ControlAus(TextBox1)
Call ControlAus(ListBox1)
End Sub
Sub ControlAus(crt As Control)
crt.Enabled = False
crt.BackColor = vbBlack
End Sub

man könnte das auch so erweitern, dass du mehrere Controls mit einem Befehl ausschalten kannst:
Private Sub CommandButton1_Click()
Call ControlAus(ComboBox1, TextBox1, ListBox1)
End Sub
Sub ControlAus(ParamArray crtls() As Variant)
Dim c
For Each c In crtls
c.Enabled = False
c.BackColor = vbBlack
Next
End Sub
kleiner Nachteil bei beiden Varianten:
da man nicht mehr auf einen speziellen Objekttyp festgelegt ist, entfällt auch die Unterstützung durch die Intellisense. Man muss dann eben vorher schon wissen, welche Objekteigenschaften man ändern will.
Gruß Daniel
Anzeige
AW: Textbox an Sub übergeben
12.06.2018 20:32:03
Jan
Hallo Mullit, Hallo Daniel,
vielen Dank für eure schnellen Antworten.
@Mullit: Das Voranstellen von MSForms hatte ich bereits schon mal irgendwo gelesen, allerdings hat das bei mir nichts an der Fehlermeldung geändert.
@Daniel: Mit Defitnition als Control klappts super. Mit der Einschränkung kann ich gut leben.
Danke + Gruß, Jan
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Textbox an Sub übergeben in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Definiere die Textbox in deiner UserForm: Stelle sicher, dass du eine TextBox in deiner UserForm hast. Wenn du eine Excel VBA Textbox verwendest, dann gehe sicher, dass du die richtige Referenz verwendest.

  2. Erstelle ein Sub für die Textbox: Du kannst ein Sub erstellen, das die Eigenschaften der Textbox anpasst. Hier ist ein Beispiel:

    Sub DisableTextBox(TargetBox As MSForms.TextBox)
       With TargetBox
           .Enabled = False
           .BackColor = Functions.RGBCode("inactive")
       End With
    End Sub
  3. Rufe das Sub auf: Verwende den Aufruf in einem anderen Sub oder einem Ereignis, wie z.B. einem Button-Klick:

    Private Sub CommandButton1_Click()
       Call DisableTextBox(TextBox1)
    End Sub
  4. Testen: Führe dein Makro aus und überprüfe, ob die Textbox wie gewünscht deaktiviert wird.


Häufige Fehler und Lösungen

  • Fehlermeldung: 'Typen unverträglich': Diese Meldung tritt auf, wenn du versuchst, eine TextBox ohne den richtigen Objekttyp zu übergeben. Stelle sicher, dass du MSForms.TextBox verwendest.

  • Intellisense nicht verfügbar: Wenn du den Parameter als Control definierst, erhältst du keine Vorschläge für spezifische Eigenschaften. Achte darauf, nur Eigenschaften zu verwenden, die für alle Steuerelemente gültig sind.


Alternative Methoden

Eine alternative Methode zur Handhabung mehrerer Steuerelemente ist die Verwendung von ParamArray. Damit kannst du mehrere Steuerelemente in einem Aufruf verwalten:

Sub ControlAus(ParamArray crtls() As Variant)
    Dim c
    For Each c In crtls
        c.Enabled = False
        c.BackColor = vbBlack
    Next
End Sub

Du kannst dann mehrere Steuerelemente gleichzeitig deaktivieren:

Private Sub CommandButton1_Click()
    Call ControlAus(ComboBox1, TextBox1, ListBox1)
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die TextBox in verschiedenen Szenarien ansprechen kannst:

  1. Deaktivieren einer Textbox:

    Sub DisableTextBox(TargetBox As MSForms.TextBox)
       TargetBox.Enabled = False
    End Sub
  2. Ändern der Hintergrundfarbe:

    Sub ChangeBackColor(TargetBox As MSForms.TextBox, color As Long)
       TargetBox.BackColor = color
    End Sub
  3. Kombinierte Anwendung in einer UserForm:

    Private Sub CommandButton1_Click()
       Call DisableTextBox(TextBox1)
       Call ChangeBackColor(TextBox1, vbRed)
    End Sub

Tipps für Profis

  • Nutze MSForms für eine klare Referenz, wenn du mit UserForms arbeitest.
  • Verwende Control als Parameter, wenn du mehrere Steuerelemente in einem Sub verwalten möchtest.
  • Denke daran, dass die Verwendung von ParamArray die Flexibilität erhöht, aber auch die Intellisense-Funktionalität einschränkt.

FAQ: Häufige Fragen

1. Kann ich die TextBox auch in einem normalen Modul verwenden?
Nein, die TextBox ist spezifisch für UserForms. Wenn du sie in einem Modul verwenden möchtest, musst du sicherstellen, dass du die UserForm erstellst und darauf zugreifst.

2. Wie kann ich mehrere Eigenschaften gleichzeitig für eine TextBox ändern?
Du kannst dies tun, indem du mehrere Anweisungen in einem Sub kombinierst oder einen With-Block verwendest, um die Lesbarkeit zu erhöhen. Beispiel:

Sub ConfigureTextBox(TargetBox As MSForms.TextBox)
    With TargetBox
        .Enabled = True
        .BackColor = vbWhite
        .Text = "Neuer Text"
    End With
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige