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

Forumthread: Changeevent verhindern bei Userform initialize

Changeevent verhindern bei Userform initialize
20.10.2016 11:40:33
Marc
Hallo zusammen,
wenn ich die Userform initialisiere und dabei einige Basiswerte setze, dann löst dies jeweils z.B. den Change-Event aus. Das soll natürlich bei Nutzung der Userform auch so sein, aber beim initialisieren ist das aus meiner Sicht nur Zeitverschwendung. Gibt es eine Möglichkeit das zu umgehen?
Danke für Eure Hilfe
Gruss Marc
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Changeevent verhindern bei Userform initialize
20.10.2016 11:51:32
Nepumuk
Hallo,
mit:
Application.EnableEvents = False
kannst du Events ausschalten. Aber nicht vergessen sie anschließend wieder einzuschalten.
Gruß
Nepumuk
AW: Changeevent verhindern bei Userform initialize
20.10.2016 12:14:16
Marc
Lieber Nepumuk,
danke, darauf hätte ich eigentlich auch selber kommen können...;-)
Lg
Marc
Application.EnableEvents = False...
20.10.2016 12:19:18
Daniel
... deaktiviert nur die Events der Mappe und der Tabellenblätter, sowie die Events der ActiveX-Steuerlemente die direkt auf den Blättern liegen.
auf die Steuerelemente der Userform hat diese Einstellung keinen Einfluss, diese werden trotzdem ausgeführt.
Gruß Daniel
Anzeige
AW: Changeevent verhindern bei Userform initialize
20.10.2016 12:12:40
Daniel
Hi
vermeide das Change-Event, wenn der Code dahinter nur bei Eingabe des Anwenders ausgeführt werden soll.
um auf Nutzereingaben sofort zu reagieren, kannst du KeyPress oder MouseUp verwenden.
ist das Makro erst erforderlich, wenn die Eingabe abgeschlossen ist, dann auch Exit.
(es gibt noch ein paar mehr solcher Events, du musst halt mal schauen, was für dich passt)
das von Nepumuk beschriebene "Application.EnableEvents = False" funktioniert nicht mit Userformen, sondern nur mit den Events der Mappe und der Arbeitsblätter, sowie für ActiveX-Steuerlemente, die direkt auf den Blättern liegen.
wenn du bei Userformen die Events temporär ausschalten willst, dann geht das nur so:
1. lege eine Useformweit gültige Boolsche Variable an, dh oberhalb der Markos:
Dim EventsAus as boolen

Diese Variable kann dann von allen Makros der Userform verwendet werten.
2. wenn die Events deaktiviert werden sollen, schreibst du:
EventsAus = True
3. in den zu deaktivierenden Makros musst du an den Anfang diese Programmzeile stellen:
If EventsAus then Exit Sub
4. um die Events zu reaktiviern
EventsAus = False
die Eventmakros werden dann zwar weiterhin gestartet, aber du brichst dann die Ausführung des dahinterliegenden Codes ab.
Gruß Daniel
Anzeige
AW: Changeevent verhindern bei Userform initialize
21.10.2016 10:00:02
Marc
Hallo Daniel,
danke Dir für die Ergänzung, habe ich inzwischen auch genau so nachvollziehen können. Damit wurde mein Problem perfekt gelöst!
Lg
Marc
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Changeevent verhindern bei Userform Initialize


Schritt-für-Schritt-Anleitung

Um den Change-Event bei der Initialisierung einer Userform in Excel VBA zu verhindern, kannst du die folgenden Schritte befolgen:

  1. Erstelle eine globale Boolesche Variable: Dies hilft dir, den Status der Events zu überwachen.

    Dim EventsAus As Boolean
  2. Deaktiviere die Events: Setze die Variable auf True, bevor du die Userform initialisierst.

    EventsAus = True
  3. Füge einen Bedingungssatz in die Event-Handler ein: An den Anfang deiner Events, wie z.B. beim Change-Event einer Textbox, füge Folgendes hinzu:

    If EventsAus Then Exit Sub
  4. Aktiviere die Events nach der Initialisierung wieder: Setze die Variable zurück auf False, nachdem die Initialisierung abgeschlossen ist.

    EventsAus = False
  5. Füge den Event-Handler für die Userform hinzu: Stelle sicher, dass die Events nur bei Nutzerinteraktionen ausgeführt werden, wenn die Variable auf False gesetzt ist.


Häufige Fehler und Lösungen

  • Fehler: Events werden trotz Deaktivierung ausgeführt
    Lösung: Stelle sicher, dass du die Bedingung If EventsAus Then Exit Sub am Anfang jedes relevanten Event-Handlers hinzufügst.

  • Fehler: Vergessen, Events wieder zu aktivieren
    Lösung: Überprüfe, dass du EventsAus = False am Ende deiner Initialisierung setzt, um die Benutzerinteraktionen wieder zu erlauben.


Alternative Methoden

Eine weitere Möglichkeit, um das Auslösen von Events während der Initialisierung zu vermeiden, ist die Verwendung von Application.EnableEvents. Beachte jedoch, dass dies nur für Arbeitsblätter und nicht für Userforms gilt.

Falls du die Events ausschalten möchtest, während die Userform geladen wird, kannst du auch die Verwendung von anderen Events wie KeyPress oder MouseUp in Betracht ziehen, um die Interaktion besser zu steuern.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du eine Userform initialisierst, ohne das Change-Event auszulösen:

Private Sub UserForm_Initialize()
    EventsAus = True
    ' Setze hier die Werte für deine Steuerelemente
    TextBox1.Value = "Beispieltext"
    EventsAus = False
End Sub

Private Sub TextBox1_Change()
    If EventsAus Then Exit Sub
    ' Dein Code hier
End Sub

In diesem Beispiel wird das Change-Event nur ausgelöst, wenn der Benutzer tatsächlich etwas in die Textbox eingibt.


Tipps für Profis

  • Verwende Debugging: Nutze Debug.Print oder Breakpoints, um den Status der Events zu überwachen.
  • Halte deine Userforms sauber: Reduziere die Anzahl der Events, die du verwendest, um die Performance zu verbessern.
  • Dokumentiere deine Events: Kommentiere deinen Code ausführlich, damit andere (oder du selbst in der Zukunft) schnell verstehen, warum bestimmte Events deaktiviert wurden.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Application.EnableEvents und einer Booleschen Variable?
Application.EnableEvents schaltet Events für die gesamte Arbeitsmappe aus, während eine Boolesche Variable nur für die spezifische Userform funktioniert.

2. Warum werden meine Events nicht deaktiviert, wenn ich Application.EnableEvents = False verwende?
Diese Einstellung hat keinen Einfluss auf die Events der Userform. Du musst eine Boolesche Variable verwenden, um die Ausführung der Userform-Events zu kontrollieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige