Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Change-Ereignisse in Userform

Change-Ereignisse in Userform
12.01.2017 08:48:28
Rookie
Hallo liebe VBAler,
ich möchte gerne mehrere Daten über ein User-Form in ein Tabellenblatt eintragen. Dem Anwender möchte ich dazu über Comboboxen verschiedene Auswahlmöglichkeiten zur Verfügung stellen.
Die Inhalte der Comboboxen beziehe ich aus Datenlisten (ListObject). Je nach Auswahl der ersten Comboboxen, sollen die Inhalte der weiteren Comboboxen variieren.
Das habe ich auch schon soweit hinbekommen.
Das Problem ist folgendes:
Die Auswahl in der ersten Combobox, beeinflusst die Inhalte der nächten beiden Comboboxen.
Beim initialisieren der Userform funktioniert alles super. Aber sobald ich den Inhalt der ersten Combobox ändere tritt aber ein Fehler auf und ich komme einfach nicht dahinter warum.
Hier ist die Beispieldatei, ich denke ihr werdet verstehen was ich meine:
https://www.herber.de/bbs/user/110484.xlsm
1. Den Button Optionen betätigen
2. Den Button Audit anlegen betätigen
Es geht um die Comboboxen LC / AEP / Kostenstelle.
Ich habe versucht mit Change-Ereignissen das Problem zu lösen. Jedes Change-Ereignis für sich funktioniert wunderbar.
Vielleicht habt ihr ja einen Tipp für mich.
Vielen Dank schon mal
Stefan
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Change-Ereignisse in Userform
12.01.2017 09:40:57
guenni
Nennt sich deadlock!
Da Du mit Change-Ereignissen arbeitest, in denen Du wiederum Changes an Objekten vornimmst, werden die Change-Ereignisse an Stellen innerhalb Deiner Programme erneut aufgerufen, insbesondere durch die .clear-Methode.
Du musst zu Beginn des Change-Ereignisses Application.enable Events ausschalten, und wenn Du mit den aktionenn fertig bist wieder einschalten.
Gruß,
Günther
Anzeige
AW: Change-Ereignisse in Userform
12.01.2017 10:01:39
Daniel
Hi
nope!
das Application.EnableEvents = False funktioniert nur für die Events der Tabellenblatter und der Mappe, aber nicht für die Userformevents.
wenn man in Userforms diese Events ausschalten will, geht das nur so:
1. man legt eine Modulweit gültige Variable an, Typ Boolean, Name bspw EventsAus
2. diese Variable setzt man auf TRUE, wenn die Events nicht ausgeführt werden sollen und auf FALSE, wenn sie ausgeführt werden sollen
3. an den Anfang jedes Events muss dann die Zeile:
IF EventsAus then Exit sub
der bessere Weg ist jedoch, die Events gezielter auszuwählen.
das Change-Event wird zwar immer standardmäßig als erstes erstellt, aber es ist häufig nicht das geeigneste Event, weil es wirklich bei jeder Änderung anspricht, egal von wem sie gemacht wurde (Anwender oder per Makro)
wenn man beispielsweise ein Makro braucht, welches nur bei Eingabe des Anwenders reagiert, aber nicht wenn die Änderung per Code durchgeführt wird, könnte man auf eines der Events:
- AfterUpdate
- Exit
- MousUp
- Click
ausweichen. Durch gezielte Eventauswahl lässt sich dann steuern, wann welche Codes laufen.
Gruß Daniel
Anzeige
AW: Change-Ereignisse in Userform
12.01.2017 09:48:17
baschti007
Oder so
Gruß Basti
Private Sub cboAEP_Change()
If Me.cboAEP.Value  "" Then
Call change2(Me.cboKostenstelle, Me.cboAEP.Value)
End If
End Sub

AW: Change-Ereignisse in Userform
12.01.2017 10:13:09
Rookie
Vielen Dank! Funktioniert!
Gruß
Stefan
AW: Change-Ereignisse in Userform
12.01.2017 10:29:29
Rookie
Die Lösung ist so einfach dass es schon fast weh tut, aber ehrlich gesagt verstehe ich nicht ganz warum sie überhaupt funktioniert!
Muss mir das nochmal durch den Kopf gehen lassen!
Nochmals Danke - hab mir stundenlang deswegen den Kopf zerbrochen!
Gruß Stefan
Anzeige
;

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

Change-Ereignisse in Userform effektiv nutzen


Schritt-für-Schritt-Anleitung

Um mit Excel VBA Userform Events zu arbeiten, insbesondere mit dem Combobox Change Event, folge diesen Schritten:

  1. Öffne deine Excel-Datei und erstelle eine neue Userform.

  2. Füge die benötigten Steuerelemente (z.B. Comboboxen und Textboxen) in die Userform ein.

  3. Um das Change-Ereignis für eine Combobox zu nutzen, füge den folgenden Code in das Codefenster der Userform ein:

    Private Sub cboAEP_Change()
       If Me.cboAEP.Value <> "" Then
           Call change2(Me.cboKostenstelle, Me.cboAEP.Value)
       End If
    End Sub
  4. Stelle sicher, dass das change2-Sub existiert und die Logik enthält, um die Inhalte der anderen Comboboxen entsprechend zu ändern.

  5. Teste die Userform, um sicherzustellen, dass die Änderungen in der ersten Combobox die anderen Comboboxen korrekt beeinflussen.


Häufige Fehler und Lösungen

Ein häufiger Fehler, der beim Arbeiten mit VBA Combobox Change Events auftritt, ist ein sogenannter "deadlock". Dieser tritt auf, wenn Änderungen an einem Steuerelement wiederholt das Change-Ereignis auslösen, was zu einem endlosen Loop führt. Hier sind Lösungen:

  • EnableEvents deaktivieren: Um das Problem zu beheben, setze am Anfang des Change-Events Application.EnableEvents = False und am Ende wieder auf True.

    Private Sub cboAEP_Change()
       Application.EnableEvents = False
       ' Dein Code hier
       Application.EnableEvents = True
    End Sub
  • Variable für Eventsteuerung: Lege eine modulweit gültige Variable an, um zu steuern, ob Events ausgeführt werden sollen:

    Dim EventsAus As Boolean
    
    Private Sub cboAEP_Change()
       If EventsAus Then Exit Sub
       ' Dein Code hier
    End Sub

Alternative Methoden

Wenn die Standard-Change-Ereignisse nicht ideal sind, kannst du auch andere Events verwenden, um die Benutzerinteraktion zu steuern. Zum Beispiel:

  • AfterUpdate: Dieses Event wird ausgelöst, nachdem der Benutzer die Eingabe abgeschlossen hat.

    Private Sub cboAEP_AfterUpdate()
       ' Dein Code hier
    End Sub
  • Exit: Dieses Event wird ausgelöst, wenn der Fokus von der Combobox wechselt.

    Private Sub cboAEP_Exit(ByVal Cancel As MSForms.ReturnBoolean)
       ' Dein Code hier
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele für den Einsatz von Textbox Change Events in einer Userform:

  • Textbox Change Event: Wenn der Benutzer Text in eine Textbox eingibt und eine bestimmte Bedingung erfüllt ist, kannst du eine andere Steuerung aktualisieren.

    Private Sub txtInput_Change()
       If Len(Me.txtInput.Value) > 5 Then
           Me.lblMessage.Caption = "Eingabe akzeptiert!"
       End If
    End Sub
  • Combobox abhängig von Textbox: Ändere die Auswahlmöglichkeiten in einer Combobox basierend auf dem Text in einer Textbox.

    Private Sub txtInput_Change()
       If Me.txtInput.Value = "Option1" Then
           Me.cboOptions.Clear
           Me.cboOptions.AddItem "Wahl A"
           Me.cboOptions.AddItem "Wahl B"
       End If
    End Sub

Tipps für Profis

  • Verwende gezielte Events: Nutze nicht immer das Change-Event. Überlege, ob andere Events wie AfterUpdate besser geeignet sind, um unnötige Ausführungen zu vermeiden.
  • Testen von Ereignissen: Teste deine Events gründlich, um sicherzustellen, dass sie nur zu den gewünschten Zeitpunkten ausgelöst werden.
  • Fehlerbehandlung einfügen: Implementiere Fehlerbehandlungen in deinen Events, um unerwartete Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Was sind Excel VBA Userform Events?
Userform Events sind spezielle Ereignisse, die in einer Userform ausgelöst werden, wenn der Benutzer mit den Steuerelementen interagiert.

2. Wie kann ich ein Textbox Change Event in VBA verwenden?
Um ein Textbox Change Event zu verwenden, füge den entsprechenden Code im Codefenster der Userform ein, um auf Änderungen in der Textbox zu reagieren.

3. Was ist der Unterschied zwischen Change und AfterUpdate?
Das Change-Ereignis wird bei jeder Änderung eines Steuerelements ausgelöst, während AfterUpdate nur ausgelöst wird, wenn der Benutzer die Eingabe abgeschlossen hat.

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