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

Forumthread: If Click in TextBox Then …

If Click in TextBox Then …
17.02.2019 23:25:59
Tobi
Hallo Zusammen,
Ich wäre für Eure Hilfe dankbar. Ich suche folgenden Code:
Wenn ich in irgendeine TextBox oder CheckBox (CheckBox1) klicke, sollen folgende Buttons auf Enabled = False gesetzt werden:
CommandButton1 = “Neu“ in UF1
CommandButton2 = “Löschen“ in UF1
CommandButton4 = “Beenden“ in UF1
CommandButton UF1_Liste = “Liste“ in UF1
“ListBox1“ in UF1
und beim Klicken auf Speichern (CommandButton3) wieder auf Enabled = True
Ich konnte einfach den Code für dieses Click Ereignis nicht finden/erkennen.
Die UF als Link anbei.
Liebe Grüße Tobi
https://www.herber.de/bbs/user/127712.xlsm
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If Click in TextBox Then …
18.02.2019 00:06:02
Tobi
Was ich noch erwähnen wollte:
Ich weiß wie das für jede einzelne TextBox funktioniert aber für mehrere TextBoxen und mehrere CommandButtons weiß ich es leider nicht. Am besten wäre doch dass man das mit einer Variablen anspricht, oder? Dafür fehlen mir dann doch noch ein paar Kenntnisse, vielleicht kann jemand weiterhelfen?
Grüße Tobi
Anzeige
AW: If Click in TextBox Then …
18.02.2019 10:01:40
Matthias
Moin!
Du könntest das enablen und ablen in eine eigene Prozedur setzten und beim Enter_Event der TB und CB dann aufrufen. Für jedes Elemente das enabled wird in der Prozedur eine Zeile.
bspw.
Sub deaktivieren()
UF1.Commandbutton1.enabled = false
UF1.Commandbutton2.enabled = false
usw.
End Sub

Aufrufen würdest du es dann nur mit call deaktivieren.
Man könnte das auch mit Klassenprogrammierung machen, dann würdest du dir das Event für jedes TB / CB sparen, dass wäre dann aber komplizierter.
VG
Anzeige
AW: If Click in TextBox Then …
18.02.2019 10:00:52
Nepumuk
Hallo Tobi,
benutze das MouseUp-Event.
Gruß
Nepumuk
AW: If Click in TextBox Then …
18.02.2019 13:07:20
Tobi
Hallo Nepumuk,
danke für den Tipp!
Private Sub TextBox2_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 Then CommandButton1.Enabled = False
End Sub
Wie packe ich das für diesen Button mit allen TextBoxen in eine Variable?
Für die restlichen CommandButtons würde ich die Variable dann jedes mal separat anwenden.
Bin leider noch nicht so geübt und noch beim lernen was VBA anbelangt.
Liebe Grüße Tobi.
Anzeige
AW: If Click in TextBox Then …
18.02.2019 13:53:27
Nepumuk
Hallo Tobi,
in eine "Variable"? Was meinst du damit?
Du könntest das in eine Klasse packen. Dann hast du eine Prozedur für alle TextBoxen.
Gruß
Nepumuk
AW: If Click in TextBox Then …
18.02.2019 14:15:47
Tobi
Hallo Nepumuk,
sorry ja Du hast Recht, das meinte ich. Es geht einfach darum, dass ich nicht jede einzelne Textbox einzeln ansprechen muss. Ich finde im Netz kein passendes Beispiel.
Anzeige
AW: If Click in TextBox Then …
18.02.2019 15:45:53
Tobi
Hallo Nepumuk,
vielen Dank erstmal für Deine tolle Hilfe !!
In Deiner Datei funktioniert das ohne Probleme. Ich habe die Codes entsprechend angepasst mit dem Klassenmodul, bei mir bringt er eine Fehlermeldung:
Laufzeitfehler 91 ; Objectvariable oder With-Blockvariable nicht festgelegt
und das ganze bei dem Code:
Private Sub DisableCommandButtons()
Dim ialngIndex As Long
For ialngIndex = LBound(maobjCommanButton) To UBound(maobjCommanButton)
maobjCommanButton(ialngIndex).Enabled = False
Next
End Sub
Hierzu eine Frage:
Du hast ab und zu CommanButton geschrieben. Ist das korrekt? Das wird jetzt nicht der Grund für die Fehlermeldung sein aber es fiel mir halt auf.
Die Datei als Link anbei mit den von Dir vorgeschlagenen Codes.
Liebe Grüße Tobi
https://www.herber.de/bbs/user/127732.xlsm
Anzeige
AW: If Click in TextBox Then …
18.02.2019 15:54:00
Nepumuk
Hallo Tobi,
du darfst natürlich nicht einfach einen Index auslassen. Also:
In der Klasse:
Private maobjCommanButton(1 To 3) As MSForms.CommandButton

Im Userform:
Set .CommandButton(3) = CommandButton4

Gruß
Nepumuk
Anzeige
AW: If Click in TextBox Then …
18.02.2019 16:48:11
Tobi
Hallo Nepumuk,
Vielen Dank, so ist es halt, wenn man noch ganz am Anfang steht. Jetzt funktioniert es! Vielleicht seid Ihr das eine oder andere mal genervt von so viel dummen Fragen, aber ich bin eigentlich eher Anwender und kein Profi und will es auch ehrlich gesagt nicht werden.
Eine Frage/Bitte noch:
Ich benötige jetzt nur noch das ganze für die Sperrung der ListBox. Ich habe versucht das vorhandene auf die ListBox anzuwenden aber natürlich funktioniert das nicht so einfach wie man sich das als "Nullblicker" vorstellt. Ist das zu kompliziert für die ListBox?
Grüße Tobi
Anzeige
AW: If Click in TextBox Then …
18.02.2019 17:03:36
Nepumuk
Hallo Tobi,
es gibt keine dummen Fragen. Nur dumme Antworten.
Im UserForm:
Private Sub Userform_Initialize()
    Dim objTextBoxClass As clsTextbox
    Dim objControl As Control
    Set TextBoxClassCollection = New Collection
    For Each objControl In Controls
        If TypeOf objControl Is MSForms.TextBox Then
            Set objTextBoxClass = New clsTextbox
            With objTextBoxClass
                Set .CommandButton(1) = CommandButton1
                Set .CommandButton(2) = CommandButton2
                Set .CommandButton(3) = CommandButton4
                Set .ListBox = ListBox1
                Set .TextBox = objControl
                Call TextBoxClassCollection.Add(Item:=objTextBoxClass)
            End With
            Set objTextBoxClass = Nothing
        End If
    Next
    Dim lzeile As Long, arrList
    With Tabelle1
        arrList = .Range(.Cells(2, 4), .Cells(.Rows.Count, 5).End(xlUp))
    End With
    For lzeile = 1 To UBound(arrList)
        arrList(lzeile, 1) = arrList(lzeile, 2) & ", " & arrList(lzeile, 1)
        arrList(lzeile, 2) = lzeile + 1
    Next
    ListBox1.List = arrList
    ListBox1.Selected(0) = True
End Sub

Im Klassenmodul:
Option Explicit

Private WithEvents mobjTextBox As MSForms.TextBox

Private maobjCommandButton(1 To 3) As MSForms.CommandButton
Private mobjListbox As MSForms.ListBox

Private Sub Class_Terminate()
    Set mobjTextBox = Nothing
    Set mobjListbox = Nothing
    Erase maobjCommandButton
End Sub

Friend Property Get TextBox() As MSForms.TextBox
    Set TextBox = mobjTextBox
End Property

Friend Property Set TextBox(ByRef probjTextBox As MSForms.TextBox)
    Set mobjTextBox = probjTextBox
End Property

Friend Property Get CommandButton(ByVal pvlngIndex As Long) As MSForms.CommandButton
    Set CommandButton = maobjCommandButton(pvlngIndex)
End Property

Friend Property Set CommandButton(ByVal pvlngIndex As Long, ByRef probjCommandButton As MSForms.CommandButton)
    Set maobjCommandButton(pvlngIndex) = probjCommandButton
End Property

Friend Property Get ListBox() As MSForms.ListBox
    Set ListBox = mobjListbox
End Property

Friend Property Set ListBox(ByRef probjListBox As MSForms.ListBox)
    Set mobjListbox = probjListBox
End Property

Private Sub mobjTextBox_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = xlPrimaryButton Then Call DisableCommandButtons
End Sub

Private Sub DisableCommandButtons()
    Dim ialngIndex As Long
    For ialngIndex = LBound(maobjCommandButton) To UBound(maobjCommandButton)
        CommandButton(ialngIndex).Enabled = False
    Next
    ListBox.Enabled = False
End Sub

Ich hatte noch einen Schreibfehler im Code des Klassenmoduls. Also bitte den kompletten Code kopieren.
Gruß
Nepumuk
Anzeige
Nepumuk hat wie so oft geholfen Vielen Dank!!!
18.02.2019 17:58:30
Tobi
Hallo Nepumuk,
das funktioniert alles bestens, ich danke Dir tausend mal für Deine freundliche Hilfe.
Liebe Grüße Tobi.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

TextBox-Klick-Ereignisse in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein vba textbox click event für mehrere TextBoxen zu erstellen, folge diesen Schritten:

  1. Öffne dein Excel-Dokument und gehe zum VBA-Editor (Alt + F11).

  2. Füge ein neues UserForm hinzu und platziere mehrere TextBoxen sowie die CommandButtons (z.B. CommandButton1, CommandButton2 usw.) auf deinem UserForm.

  3. Erstelle ein Klassenmodul für die TextBoxen:

    • Klicke mit der rechten Maustaste auf "VBAProject" und wähle "Einfügen" > "Klassenmodul".
    • Benenne das Klassenmodul, z.B. clsTextbox.
  4. Im Klassenmodul fügst du den folgenden Code ein:

    Option Explicit
    Private WithEvents mobjTextBox As MSForms.TextBox
    Private maobjCommandButton(1 To 3) As MSForms.CommandButton
    Private mobjListBox As MSForms.ListBox
    
    Friend Property Set TextBox(ByRef probjTextBox As MSForms.TextBox)
       Set mobjTextBox = probjTextBox
    End Property
    
    Friend Property Set CommandButton(ByVal pvlngIndex As Long, ByRef probjCommandButton As MSForms.CommandButton)
       Set maobjCommandButton(pvlngIndex) = probjCommandButton
    End Property
    
    Private Sub mobjTextBox_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
       If Button = 1 Then Call DisableCommandButtons
    End Sub
    
    Private Sub DisableCommandButtons()
       Dim ialngIndex As Long
       For ialngIndex = LBound(maobjCommandButton) To UBound(maobjCommandButton)
           maobjCommandButton(ialngIndex).Enabled = False
       Next
       mobjListBox.Enabled = False
    End Sub
  5. Im UserForm initialisierst du die TextBoxen und CommandButtons im UserForm_Initialize:

    Private Sub UserForm_Initialize()
       Dim objTextBoxClass As clsTextbox
       Dim objControl As Control
       Set TextBoxClassCollection = New Collection
       For Each objControl In Controls
           If TypeOf objControl Is MSForms.TextBox Then
               Set objTextBoxClass = New clsTextbox
               With objTextBoxClass
                   Set .CommandButton(1) = CommandButton1
                   Set .CommandButton(2) = CommandButton2
                   Set .ListBox = ListBox1
                   Set .TextBox = objControl
                   Call TextBoxClassCollection.Add(Item:=objTextBoxClass)
               End With
           End If
       Next
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Objectvariable oder With-Blockvariable nicht festgelegt

    • Dieser Fehler tritt häufig auf, wenn du eine nicht korrekt referenzierte Variable verwendest. Stelle sicher, dass alle Objekte richtig zugewiesen sind.
  • Buttons bleiben aktiviert

    • Überprüfe, ob das MouseUp-Ereignis der TextBoxen korrekt implementiert ist. Stelle sicher, dass der Button richtig überprüft wird.

Alternative Methoden

Eine alternative Methode besteht darin, das MouseUp-Ereignis direkt in jeder TextBox zu verwenden, anstatt eine Klasse zu erstellen. Dies ist jedoch weniger elegant und erfordert mehr Code, wenn du viele TextBoxen hast.

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        CommandButton1.Enabled = False
        CommandButton2.Enabled = False
    End If
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie man das vba textbox click event für mehrere TextBoxen und CommandButtons implementieren kann:

  1. Erstelle ein UserForm mit drei TextBoxen und drei CommandButtons.
  2. Implementiere die obigen Schritte in deinem VBA-Projekt.
  3. Teste das UserForm, indem du auf die TextBoxen klickst. Die CommandButtons sollten deaktiviert werden.

Tipps für Profis

  • Nutze WithEvents, um eine sauberere und effizientere Verwaltung der vba textbox events zu ermöglichen.
  • Erstelle eine excel vba textbox events list, um den Überblick über alle verwendeten Events und deren Implementierungen zu behalten.
  • Überlege, ob du die excel vba if button clicked then-Logik in eine separate Funktion auslagern kannst, um den Code lesbarer zu machen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere TextBoxen gleichzeitig ansprechen?
Du kannst eine Sammlung von TextBoxen in einer Klasse verwalten, um die vba select textbox-Logik zu vereinfachen.

2. Was ist der Unterschied zwischen MouseUp und Click?
Das MouseUp-Ereignis wird ausgelöst, nachdem die Maustaste losgelassen wurde, während das Click-Ereignis sofort beim Drücken und Loslassen der Maustaste ausgelöst wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige