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

Forumthread: Textbox Change ereignis

Textbox Change ereignis
14.06.2019 06:13:27
Lisa
Guten Morgen,
bei Eingabe der Startzahl wir die erste Zahl in der Textbox "txtKD_NK_Anzeige2" nicht dagestellt.
Wie kann ich dies ändern?
Danke!
Gruß
Lisa
https://www.herber.de/bbs/user/130377.xlsm
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textbox Change ereignis
14.06.2019 12:25:23
Hajo_Zi
Hallo Lisa,
ich gebe 1 ein und es wird gleich angezeigt.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Textbox Change ereignis
14.06.2019 14:12:32
Lisa
Hallo Hajo,
wenn man 1 eingibt müßte es 165-1 heissen, angezeigt wird jedoch nut 65-1 erst nachdem man z.B. den Buchstaben wechselt wird die Anzeige korrekt angezeigt.
Danke!
Gruß
Lisa
Anzeige
AW: Textbox Change ereignis
14.06.2019 14:27:17
Hajo_Zi
Hallo Lisa,
im ersten Beitrag ging es um die Eingabe in einer Texbox die nicht angezeigt wird.
Deinenj Beitrag verstehe ich nicht. Es geht wohl niccht mehr um das was im ersten Beitrag Stand.
Viel Erfolg noch.
Gruß Hajo
Anzeige
AW: Textbox Change ereignis
14.06.2019 14:43:02
Lisa
Hallo Hajo,
in meinem ersten Beitrag habe ich geschrieben, "bei Eingabe der Startzahl wir die erste Zahl in der Textbox "txtKD_NK_Anzeige2" nicht dagestellt."
Dieser Fehler ist leider geblieben.
Gruß
Lisa
AW: Textbox Change ereignis
14.06.2019 14:46:55
Nepumuk
Hallo Lisa,
ohne auf deinen Code näher einzugehen, aber das: Public arrTextbox() As New Klasse1
ist eine ganz schlechte Idee. Damit werden alle TextBoxen die du der Klasse zuordnest wie eine TextBox behandelt. Das kann ganz unvorhergesehene Nebenwirkungen haben. Mach es besser so:
Public arrTextbox() As Klasse1
Public arrCbo() As Klasse1

'Klassenmodul für Textboxeingaben Prüfung
sI = 0
For Each obj In .Controls
    Select Case TypeName(obj)
        Case "TextBox"
            If obj.Name <> "" Then
                sI = sI + 1
                Redim Preserve arrTextbox(1 To sI)
                Set arrTextbox(sI) = New Klasse1
                Set arrTextbox(sI).txtTextbox = obj
            End If
    End Select
Next
'Klasse für Cbo erstellen
sI = 0
For Each obj In .Controls
    Select Case TypeName(obj)
        Case "ComboBox"
            sI = sI + 1
            Redim Preserve arrCbo(1 To sI)
            Set arrCbo(sI) = New Klasse1
            Set arrCbo(sI).Cbo = obj
    End Select
Next

Dein Problem, weswegen du fragst, habe ich nicht verstanden. Erklär das mal genauer was du eigentlich erreichen willst.
Gruß
Nepumuk
Anzeige
AW: Textbox Change ereignis
14.06.2019 15:04:40
Lisa
Hallo Nepumuk,
in meiner Original Mappe habe ich alle Klasse einzeln definiert
'Klassen KD
Public arrCmd() As New cls1 'CommandButton, Speichern, Löschen, Abbruch
Public arrCbo() As New cls1 'ComboBox ,Land, Anrede, Titel
Public arrOpt() As New cls1 'Kundennummer
Public arrLbl() As New cls1 'Label Abdeckungen 'Msgbox
Public arrLst() As New cls1 'ListBox 'Auswertung und ändern
Public arrKom() As New cls1 'Textboxen PLZ,Tele,Mobil (rein Funktionen)
Public arrTextbox() As New cls1 'Textboxen allgemein ' Sprung in nächstes Element 'Tabindex
Aber das nu am Rande.
Was ich erreichen will ist, dass bei Eingabe in Start Zahl die Zahlenfolge in Anzeige erscheint.
Wenn die UF geöffnet wird und man gibt z.B. 123 in Start Zahl ein, dann sollte die Anzeige, ohne das man den Buchstaben "A" und das Format der lfd. Zahl verändert, 12365-1 anzeigen.
Angezeigt wird jedoch 1265-1.
Lassen wir die 123 und verändern nun den Buchstaben auf "B" dann wird korrekt angezeigt 12366-1.
Lassen wir die 123 und verändern nun Format lfd. Zahl auf "00" dann wird korrekt angezeigt 12366-01.
Das ganze dient dazu eine Kundennummer aus einer beliebigen Zahl & ASCII Wert aus erstem Buchstaben - laufende Kundennummer mit dem gleichen Anfangsbuchstaben.
Ich hoffe ich habe mich verständlich ausgedrückt.
Danke für Deine Hilfe!
Gruß
Lisa
Anzeige
AW: Textbox Change ereignis
14.06.2019 15:12:18
Daniel
HI
so ganz genau habe ich mir deinen Code noch nicht angeschaut, weil ich mich mit der Klassenprogrammierung nicht auskenne.
Die Frage ist, brauchst du Klassenprogrammierung hier überhaupt oder macht das das ganze nicht nur unnötig kompliziert?
Soweit ich das verstanden habe, ist Klassenprogrammierung nur dann sinnvoll, wenn viele Steuerelemente hast, die die gleichen Eventmakros benötigen und das kann ich hier nicht erkennen.
so wie ich den Ablauf verstanden habe, verwendest du ja gar kein Change-Event für die TextBox, sondern machst das im Keypress-Event. Es wäre also durchaus möglich, dass zu dem Zeitpunkt, zu dem du den Textboxwert abfragst, die gedrückte Taste noch gar nicht in die TextBox übergeben wurde.
Gruß Daniel
Anzeige
AW: Textbox Change ereignis
14.06.2019 15:17:36
Lisa
Hallo Daniel,
in meiner Userform befinden sich mehr als 200 Steuerelemte (Textboxen und ComboBoxen) da macht es für mich schon Sinn alles über Klasse zu steuern.
Das Keypress-Event verwende ich nur um die Eingaben zu kontrollieren. z.B das bei Textboxen wo Mobilnummer eingebtragen werden
Public Function funcMobil(objTextBox As MSForms.TextBox, intKeyNumber As Integer) As Integer
Select Case intKeyNumber
Case 32, 43, 45, 47, 48 To 57: funcMobil = intKeyNumber
Case Else: funcMobil = 0
lMsg = MsgBox("Im Feld " & vbLf & "Mobil                                                 _
" & vbLf & _
"Trennzeichen  '/ ' " & " '-'  " & " " & " '+' " & vbLf & "und Leerzeichen" & vbLf & _
"erlaubt...", vbOKOnly + vbCritical, "Fehler: Eingabe Mobil...")
End Select
End Function
Danke trotzdem!
Gruß
Lisa
Anzeige
AW: Textbox Change ereignis
14.06.2019 15:46:44
Daniel
Hi
ich habs mir nochmal genau angeschaut:
es ist tatsächlich so, dass du das Makro, um die zweite TextBox zu befüllen, über das KeyPress-Event der ersten TextBox aufrufst.
das ist zu früh, zu diesem Zeitpunkt wurde das Zeichen der gedrückten Taste noch nicht in die TextBox geschrieben.
Das KeyPress-Event entspricht von der zeitlichen Positionierung wohl eher dem KeyDown als dem KeyUp
Private Sub txtTextbox_KeyPress(ByVal intKeyASc As MSForms.ReturnInteger) 'Prüfen  _
Zahleneingaben
Select Case txtTextbox.Name
Case "txtKD_AZ_NK"
intKeyASc = funcNK(txtTextbox, CInt(intKeyASc))
If txtTextbox.Tag  "" Then Run txtTextbox.Tag 

du müsstest dir hierfür noch ein Change-Event erstellen, denn dieses wird NACH der Änderung des Inhaltes der TextBox aktiv und dort diesen Aufruf durchführen.
Gruß Daniel
Anzeige
AW: Textbox Change ereignis
14.06.2019 16:18:34
Lisa
Hallo Daniel,
nochmals danke dür Deine Unterstützung.
Aber meine VBA Kenntnisse sind begrenzt. Ich erstelle die Klassen für die Textboxen wie folgt
'Klassenmodul für Textboxeingaben Prüfung
with UF
sI = 0
For Each obj In .Controls
Select Case TypeName(obj)
Case "TextBox"
If Split(obj.Name, "_")(1) = "PLZ" Then
sI = sI + 1
ReDim Preserve arrKom(1 To sI)
Set arrKom(sI).txtKom = obj
ElseIf Split(obj.Name, "_")(1) = "Telefon" Then
sI = sI + 1
ReDim Preserve arrKom(1 To sI)
Set arrKom(sI).txtKom = obj
ElseIf Split(obj.Name, "_")(1) = "AZ" Then
sI = sI + 1
ReDim Preserve arrKom(1 To sI)
Set arrKom(sI).txtKom = obj
end if
end with
usw.
So gibt es in meiner UF z.B. 5 Textboxen die die Eingabe einer PLZ erfordern. Alle haben den gleichen Namensaufbau : txtKD_PLZ_KD, txtP_PLZ_P usw.
Ich habe mich nun entschlossen, dass ich erst den Buchstaben auswählen muß und dann erst die Zahleneingabe, dann sind die Probleme weg.
Danke!
Gruß
Lisa
Anzeige
AW: Lösung anders erstellt
14.06.2019 16:34:50
Lisa
Hallo Daniel, Nepumuk,
habe jetzt eine andere Lösung.
Diese funktioniert so wie ich es haben will.
Danke für Eure Hilfe!
Gruß
Lisa
https://www.herber.de/bbs/user/130393.xlsm
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Textbox Change Ereignis in VBA


Schritt-für-Schritt-Anleitung

Um das Textbox Change Ereignis in Excel VBA zu implementieren, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).

  2. Füge ein neues UserForm hinzu (Rechtsklick auf "VBAProject" > Einfügen > UserForm).

  3. Füge eine TextBox (z.B. txtKD_NK_Anzeige2) hinzu, um Eingaben zu tätigen.

  4. Klicke mit der rechten Maustaste auf die TextBox und wähle "Code anzeigen".

  5. Füge den folgenden Code ein, um das Change Event zu erstellen:

    Private Sub txtKD_NK_Anzeige2_Change()
       ' Hier kannst du die Logik für die TextBox-Veränderung implementieren
       Dim inputText As String
       inputText = txtKD_NK_Anzeige2.Value
       ' Füge hier deine Logik hinzu, um den Text zu verarbeiten
       MsgBox "Eingegebener Text: " & inputText
    End Sub
  6. Speichere dein Projekt und teste die UserForm.


Häufige Fehler und Lösungen

  • Fehler: Die eingegebene Zahl wird nicht korrekt angezeigt.

    • Lösung: Überprüfe, ob du das richtige Event verwendest. Das KeyPress Event wird vor dem Change Event ausgelöst. Verwende stattdessen das Change Event, um sicherzustellen, dass der Text korrekt verarbeitet wird.
  • Fehler: Die TextBox zeigt keinen Text an, selbst wenn etwas eingegeben wird.

    • Lösung: Stelle sicher, dass die TextBox die richtige Sichtbarkeit und den richtigen Fokus hat. Überprüfe auch, ob die TextBox deaktiviert ist.
  • Fehler: Der Text in der TextBox wird erst aktualisiert, nachdem eine andere Taste gedrückt wurde.

    • Lösung: Nutze das Textbox Change Event anstelle des Textbox KeyPress Event.

Alternative Methoden

Neben dem Textbox Change Event kannst du auch andere Events in Betracht ziehen, wie:

  • Textbox KeyDown Event: Dieses Event wird ausgelöst, sobald eine Taste gedrückt wird, bevor der Text aktualisiert wird.
  • Textbox KeyUp Event: Dieses Event wird nach der Eingabe einer Taste ausgelöst und kann ebenfalls für die Bearbeitung von Eingaben genutzt werden.

Diese Events können in Kombination mit dem Textbox Change Event verwendet werden, um komplexere Logiken zu implementieren.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du die Eingabe in der TextBox verarbeiten kannst, um eine Kundennummer zu generieren:

Private Sub txtKD_NK_Anzeige2_Change()
    Dim startNumber As String
    startNumber = txtKD_NK_Anzeige2.Value
    If Len(startNumber) > 0 Then
        ' Beispiel zur Generierung einer Kundennummer
        txtKD_NK_Anzeige2.Value = startNumber & "65-1"
    End If
End Sub

Dieses Beispiel zeigt, wie du den Wert der TextBox verarbeiten kannst, um eine bestimmte Formatierung zu erhalten.


Tipps für Profis

  • Verwende Public Variablen, um den Status von TextBoxen über verschiedene Module hinweg zu verfolgen.
  • Nutze Klassen in VBA, um die Logik für mehrere TextBoxen zu kapseln und redundanten Code zu vermeiden.
  • Achte darauf, dass du die richtigen Textbox Events verwendest, um das gewünschte Verhalten zu erreichen. Die Verwendung des Textbox Change Events ist oft der beste Ansatz, um sicherzustellen, dass die Eingabe korrekt verarbeitet wird.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen dem Change Event und dem KeyPress Event? Der Change Event wird ausgelöst, nachdem der Inhalt der TextBox geändert wurde, während der KeyPress Event ausgelöst wird, wenn eine Taste gedrückt wird. Daher kann der Change Event zuverlässigere Ergebnisse für die Verarbeitung von Eingaben liefern.

2. Wie kann ich sicherstellen, dass die TextBox immer den aktuellen Wert anzeigt? Stelle sicher, dass du das Change Event richtig implementiert hast und alle relevanten Änderungen dort bearbeitest. Vermeide die Verwendung des KeyPress Events, wenn du sicherstellen möchtest, dass der Text sofort aktualisiert wird.

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