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

Forumthread: Textbox Change() Methode ohne Schleife

Textbox Change() Methode ohne Schleife
urmila
Hallo alle zusammen,
ich hoffe ihr könnt mir weiterhelfen...
Ich habe ein TextBox1 mit Change() Methode
Ich will nun, dass wenn ich einen Wert in dieser Textbox1 eingebe, x-beliebige Aktion ausführt. Anschließend soll er die Textbox1 entleeren. Das Problem ist nur dass er die definierte Aktion (meinetwegen MsgBox) zweimal ausführt, da er das entleeren auch als Change() hält.
Wie kann ich das umgehen, so dass ich nicht die ganze Userform unloaden und nochmals zeigen lassen muss?
Ich hoffe es war verständlich
Danke & LG
Urmila
Anzeige
AW: Textbox Change() Methode ohne Schleife
03.08.2010 13:29:07
Rudi
Hallo,
Private Sub TextBox1_Change()
Dim blnCode As Boolean
If Not blnCode Then
blnCode = True
'Code für Aktion
TextBox1 = ""
blnCode = False
End If
End Sub

Gruß
Rudi
AW: Textbox Change() Methode ohne Schleife
03.08.2010 13:37:20
urmila
Danke Rudi
das klappte leider nicht....dann fiel mir die if Anweisung...und habe es so gelöst..w.eiß zwar net ob das profffesssionelll ist... :)
If TextBox1.Value  "" Then
MsgBox "Hallo"
TextBox1 = ""
Else
Exit Sub
End If
LG
Urmila
Anzeige
AW: Textbox Change() Methode ohne Schleife
03.08.2010 13:40:21
IngGi
Hallo zusammen,
oder einfach so:
Private Sub TextBox1_Change()
Application.EnableEvents = False
TextBox1 = ""
Application.EnableEvents = True
End Sub
Gruß Ingolf
EanbleEvents
03.08.2010 14:02:25
Rudi
Hallo,
das wirkt nicht in einer Userform.
Gruß
Rudi
AW: Textbox Change() Methode ohne Schleife
03.08.2010 15:33:13
JogyB
Hallo Urmila,
Rudi hat vergessen, die Variable blnCode als statisch zu deklarieren, also
Static blnCode As Boolean
Dann klappt es auch.
Gruß, Jogy
Anzeige
AW: Textbox Change() Methode ohne Schleife
03.08.2010 14:31:56
urmila
Hallo
Danke für eure Hilfe.
Zwar geht das mit der If Anweisung, doch das Problem, was ich vergessen habe zu eräwhnen, ist leider nicht behoben.
Ich habe einen Barcode-Scanner, ich will das die ganze Nummer im Textbox1 eingelesen wird und erst dann eine Aktion ausführen. Bisher ist es so, dass er die ersta Zahl eines Barcodes annimmt und gleich Aktion ausführt (suchen, filtern etc.) da kommt dann immer eine Fehlermeldung.
Kann man mir hier vll weiterhelfen?
Danke und LG
Urmila
Anzeige
AW: Textbox Change() Methode ohne Schleife
03.08.2010 15:35:41
JogyB
Hallo Urmila,
wenn es z.B. 10 Zeichen sein sollen:
Private Sub TextBox1_Change()
Static blnCode As Boolean
If Not blnCode And Len(TextBox1.Value) = 10 Then
blnCode = True
'Code für Aktion
TextBox1 = ""
blnCode = False
End If
End Sub
Gruß, Jogy
AW: Textbox Change() Methode ohne Schleife
04.08.2010 09:00:39
urmila
Hallo Jogy
danke, das ist eine gute Lösung, sofern die Länge auf 10 beschränkt ist.
Aber was wenn es kürzer oder länger ist?
Kann man das net so einrichten dass es nach Eingabe ca 1-2 sekunden wartet und dann eine Aktion ausführt?
Danke und LG
Urmila
Anzeige
AW: Textbox Change() Methode ohne Schleife
04.08.2010 09:32:18
JogyB
Hallo Urmila,
es gibt da diverse Möglichkeiten. Das Warten halte ich dabei aber für die schlechteste, da schaut man mal kurz zur Seite und schon ist die Eingabe futsch. Ich würde es eher so machen, dass bei Drücken der Eingabetaste die Eingabe bestätigt und das Makro ausgeführt wird.
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
'Code für Aktion
TextBox1 = ""
End If
End Sub

Der alte Code fliegt dann raus.
Gruß, Jogy
Anzeige
AW: Textbox Change() Methode ohne Schleife
04.08.2010 10:03:33
urmila
Hallo Jogy
danke nochmals, werde gleich ausversuchen.
Doch würde mich interessieren wie es mit der Wartezeit auszusehen hat....könntest/würdest du das auch posen, bitte?
Ich gehe aber davon aus dass ich nur mit dem BarCode Scanner scannen werde...daher dachte ich an diese Lösung....
Danke und LG
Urmila
Anzeige
AW: Textbox Change() Methode ohne Schleife
04.08.2010 14:28:05
JogyB
Hallo Urmila,
das hier in das UserForm:
Dim myTime As Date
Private Sub TextBox1_Change()
If CodeChange Then Exit Sub
Debug.Print myTime
' alten Time stoppen, egal, wenn es einen Fehler gibt
On Error Resume Next
Application.OnTime myTime, "deinCode", , False
On Error GoTo 0
myTime = Now + TimeSerial(0, 0, 2)
Application.OnTime myTime, "deinCode"
End Sub

Und das hier in ein allgemeines Modul:
Public CodeChange As Boolean
Sub deinCode()
' hier der Code, mit dem Du die Daten verarbeitest
' anschließend Textbox leeren
CodeChange = True
UserForm1.TextBox1 = ""
CodeChange = False
End Sub
Wartet 2 Sekunden, kürzer würde ich nicht machen.
Gruß, Jogy
Anzeige
vielen lieben Dank Jogy....
04.08.2010 14:35:40
urmila
LG
Urmila
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Textbox Change Methode in VBA Optimieren


Schritt-für-Schritt-Anleitung

Um das Verhalten eines Textfeldes in einer Userform zu steuern und unerwünschte Aktionen zu vermeiden, kannst du die Change() Methode in VBA nutzen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge eine Userform hinzu und platziere ein Textfeld (TextBox1) darauf.

  3. Doppelklicke auf das Textfeld, um den Code-Editor zu öffnen, und füge den folgenden Code ein:

    Private Sub TextBox1_Change()
       Static blnCode As Boolean
       If Not blnCode Then
           blnCode = True
           ' Hier kannst du die gewünschte Aktion ausführen
           MsgBox "Eingabe: " & TextBox1.Value
           TextBox1.Value = ""
           blnCode = False
       End If
    End Sub
  4. Schließe den VBA-Editor und teste die Userform.


Häufige Fehler und Lösungen

  • Problem: Die Aktion wird mehrmals ausgeführt.

    • Lösung: Verwende eine statische Variable, um zu verhindern, dass der Code erneut ausgeführt wird, während die TextBox geleert wird.
  • Problem: Die Eingabe eines Barcode-Scanners wird nicht korrekt verarbeitet.

    • Lösung: Stelle sicher, dass du die Eingabe mit einer Länge von 10 Zeichen überprüfst oder eine Wartezeit einbaust, um die gesamte Nummer zu erfassen.

Alternative Methoden

Eine weitere Methode, um unerwünschte Doppelaktionen zu vermeiden, ist die Verwendung des KeyDown-Ereignisses. Hier ist ein Beispiel:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then ' 13 entspricht der Eingabetaste
        ' Hier kannst du die gewünschte Aktion ausführen
        MsgBox "Eingabe bestätigt: " & TextBox1.Value
        TextBox1.Value = ""
    End If
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, die du anpassen kannst:

  • Wartezeit einfügen: Um eine 2-sekündige Wartezeit einzubauen, nutze den folgenden Code:

    Dim myTime As Date
    Private Sub TextBox1_Change()
       On Error Resume Next
       Application.OnTime myTime, "deinCode", , False
       On Error GoTo 0
       myTime = Now + TimeSerial(0, 0, 2)
       Application.OnTime myTime, "deinCode"
    End Sub
    
    Public CodeChange As Boolean
    Sub deinCode()
       MsgBox "Aktion nach 2 Sekunden"
       CodeChange = True
       UserForm1.TextBox1 = ""
       CodeChange = False
    End Sub
  • Längenprüfung: Um sicherzustellen, dass der Text in TextBox1 genau 10 Zeichen lang ist:

    Private Sub TextBox1_Change()
       If Len(TextBox1.Value) = 10 Then
           ' Hier die gewünschte Aktion ausführen
           MsgBox "10 Zeichen erkannt!"
           TextBox1.Value = ""
       End If
    End Sub

Tipps für Profis

  • Nutze die Static-Variablen, um den Status innerhalb deiner Subroutinen zu speichern.
  • Halte die Userform übersichtlich, um die Benutzerfreundlichkeit zu erhöhen.
  • Teste deinen Code gründlich, besonders bei der Verarbeitung von Eingaben von Barcode-Scannern.

FAQ: Häufige Fragen

1. Wie kann ich verhindern, dass die MsgBox mehrfach angezeigt wird? Verwende eine statische Variable, um sicherzustellen, dass die Aktion nur einmal ausgeführt wird.

2. Kann ich eine Aktion verzögern, bis die Eingabe abgeschlossen ist? Ja, du kannst die Application.OnTime Methode verwenden, um eine Verzögerung einzubauen und die Eingabe zu verarbeiten, nachdem eine bestimmte Zeit vergangen ist.

3. Was kann ich tun, wenn meine Userform nicht richtig reagiert? Überprüfe deine Ereignisprozeduren auf korrekte Syntax und stelle sicher, dass keine anderen Ereignisse gleichzeitig ausgelöst werden.

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