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

Forumthread: "AfterUpdate" oder "Change" ?! Combobox

"AfterUpdate" oder "Change" ?! Combobox
k
Hallo,
in einer Userform nutze ich eine "AfterUpdate"-Prozedure für eine Combobox. Change konnte ich hier nicht verwenden, da sonst bei jedem Buchstaben der eingegeben wird - eine MSGBox sich lädt, wenn der Datensatz nicht in der Datentabelle gefunden wird - das nervt.
Mit AfterUpdate, wartet Escel bis die Eingabe abgschlossen ist und dann einmal eine MSGBox mit dem Hinweis, dass z.B. der Datensatz noch nicht vorhanden ist und Neu angelegt werden müsste.
Aber wie kann ich bei AfterUpdate es hinbekommen, dass alle anderen Control-Elemente (Textboxen, Checkboxen etc. ) entsprechend geladen werden - OHNE Enter - sondern mit der Eingabe, bzw. bei der Nutzung der Pfeil Rauf- & Runter-Tasten, wenn man z.B. durch alle Datensätze laufen will?! Bei der Change-Variante geht es zwar, aber bei der Eingabe bekomme ich bei jedem Buchstaben dann einen MSGBoxAufruf !?
Oder Besser - kann man bei der Change-Variante etwas tun, um die Eingabe abzuwarten bis "Enter" gedrückt wird ?!
Gruß und Danke !
Kay
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: "AfterUpdate" oder "Change" ?! Combobox
27.07.2009 13:20:23
Adelhorst
hallo k.
Versuche das Ereignis '_KeyDown'. Da wird dir der KeyCode der gedrückten Taste mitgeliefert.
z.B.
Select Case KeyCode
Case 8: 'BackSpace
'Auf Taste reagieren
Case 9: 'Tab
'Auf Taste reagieren
Case 13: 'Enter
'Auf Taste reagieren
Case 37 To 40: 'Pfeiltasten
'Auf Taste reagieren
Case 46: 'Delete
'Auf Taste reagieren
End Select
oder einfacher für die Enter-Taste
If KeyCode = 13 Then 'ProzedurenAufruf'
Gruss Adelhorst
Anzeige
AW: "AfterUpdate" oder "Change" ?! Combobox
27.07.2009 16:03:49
k
Hallo leider ohne wirklichen Erfolg:
versuchte folgendes:
Private Sub CB1_Change()
If KeyCode = 13 Then 'ProzedurenAufruf'
Call CB1_AfterUpdate
Else
For i = 37 To 40
If KeyCode = i Then
Call CB1_AfterUpdate
End If
Next i
End If
End Sub
Wo ist der Fehler, bzw. wie kann ich mein Problem beheben ?!
Gruß
Kay
Anzeige
AW: "AfterUpdate" oder "Change" ?! Combobox
27.07.2009 21:29:58
Adelhorst
Hallo k.
Du musst es im KeyDown-Ereignis aufrufen:
Private Sub CB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select KeyCode
Case 13
CB1_AfterUpdate
Case 37 to 40
CB1_AfterUpdate
End Select
End Sub

Gruss Adelhorst
Anzeige
AW: "AfterUpdate" oder "Change" ?! Combobox
28.07.2009 10:01:37
k
Hallo,
leider kenne ich mich noch nicht so richtig mit Select-Case Schleifen aus. Versuchte Deinen Code zu übernehmen - bekomme aber gleich eine Fehlermeldung
Select Keycode --- geht nicht ! Fehlermeldung "Erwartet Case"
Wie würde es hier richtig lauten ?!
Gruß und vielen Dank !
Kay
Anzeige
AW: "AfterUpdate" oder "Change" ?! Combobox
28.07.2009 12:11:55
Adelhorst
Hallo k.
Du hast recht, ich hab da etwas vergessen. Es muss wie folgt lauten:
Private Sub CB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13
CB1_AfterUpdate
Case 37 To 40
CB1_AfterUpdate
End Select
End Sub
Hatte es vorher nicht im VB-Editor geschreiben, sonst wäre mir der Fehler gleich aufgefallen.
Wenn du in den VisualBasic-Editor gehst, und dann auf das Tabellenblatt klickst, wo du deine ComboBox CB1 drin hast, dann musst du diese Sub dort einfügen.
Wird KeyCode= 13 oder KeyCode=(37to40) gedrückt wird die Sub 'CB1_AfterUpdate' aufgerufen.
Dein Code innerhalb der SUB war auch nicht verkehrt, aber über SelectCase ist es doch übersichtlicher.
'Select Case KeyCode' => Es wird nun die Variable KeyCode auf ihren Wert hin abgefragt.
'Case 13' => Ist KeyCode = 13, dann wird der folgende Code ausgeführt
'Case 37 to 40' => Ist KeyCode zw. 37 und 40, dann wird der folgende Code ausgeführt
'End Select' => Die Abfrage ist nun beendet
Eigentlich ganz einfach, oder?
Gruss und Sorry wegen dem Fehler.
Adelhorst
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

AfterUpdate oder Change: Die optimale Nutzung der Combobox in VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den Visual Basic-Editor in Excel.

  2. Füge eine Combobox in Deine Userform ein.

  3. Verwende das AfterUpdate-Ereignis:

    Private Sub CB1_AfterUpdate()
       ' Dein Code hier, um die Eingabe zu verarbeiten
    End Sub
  4. Nutze das KeyDown-Ereignis, um die Eingabe zu steuern:

    Private Sub CB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
       Select Case KeyCode
           Case 13 ' Enter-Taste
               Call CB1_AfterUpdate
           Case 37 To 40 ' Pfeiltasten
               Call CB1_AfterUpdate
       End Select
    End Sub
  5. Teste die Userform und überprüfe, ob die MSGBox nur einmal erscheint, wenn die Eingabe abgeschlossen ist.


Häufige Fehler und Lösungen

  • Fehler: "Erwartet Case"

    • Lösung: Stelle sicher, dass Du Select Case KeyCode korrekt schreibst und nicht einfach Select KeyCode. Das muss so aussehen:
      Select Case KeyCode
  • MSGBox erscheint bei jedem Buchstaben:

    • Lösung: Nutze das AfterUpdate-Ereignis und implementiere das KeyDown-Ereignis, um die Eingabe zu kontrollieren, wie oben beschrieben.

Alternative Methoden

Wenn Du die Verwendung von AfterUpdate und Change in einer Combobox vermeiden möchtest, kannst Du auch die AfterRefresh-Ereignisse verwenden, um die Benutzeroberfläche zu aktualisieren, nachdem Daten geladen wurden. Dies ist besonders nützlich, wenn Du mit externen Datenquellen arbeitest.


Praktische Beispiele

  • Beispiel für eine einfache Validierung:

    Private Sub CB1_AfterUpdate()
      If IsEmpty(CB1.Value) Then
          MsgBox "Bitte wähle einen Datensatz aus."
      Else
          ' Weitere Logik hier
      End If
    End Sub
  • Beispiel für die Nutzung der Pfeiltasten:

    Private Sub CB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      Select Case KeyCode
          Case 40 ' Pfeil nach unten
              ' Logik für das Navigieren nach unten
          Case 38 ' Pfeil nach oben
              ' Logik für das Navigieren nach oben
      End Select
    End Sub

Tipps für Profis

  • Verwende die Event-Handler effizient: Um Performance zu verbessern, solltest Du sicherstellen, dass die Daten nur bei Bedarf neu geladen werden. Verwende Application.ScreenUpdating = False und True, um das Flackern des Bildschirms zu vermeiden.

  • Nutze Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Fehler während der Benutzereingabe zu managen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen AfterUpdate und Change in VBA? AfterUpdate wird ausgeführt, nachdem der Benutzer die Eingabe abgeschlossen hat, während Change jedes Mal ausgelöst wird, wenn sich der Inhalt ändert.

2. Wie kann ich die Combobox so einstellen, dass sie nur bei Drücken der Enter-Taste reagiert? Nutze das KeyDown-Ereignis, um zu überprüfen, ob die Enter-Taste gedrückt wurde, und rufe dann die AfterUpdate-Prozedur auf.

3. Ist es möglich, mehrere Comboboxen in einer Userform zu verwenden? Ja, Du kannst mehrere Comboboxen hinzufügen und für jede die entsprechenden Event-Handler definieren, um ihre Logik zu steuern.

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