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

Forumthread: Application.EnableEvents wieder einschalten

Application.EnableEvents wieder einschalten
Peter
Guten Tag
In einem Workbook habe ich folgendes Workbook_BeforeClose Event:
Privat

Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Application.EnableEvents = False
Call BereicheDefinieren
Call xSpeichern
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Ich möchte jedoch über einen Aufruf eines anderen Subs die Möglichkeit haben, die Datei zu schliessen, ohne dass das Event Workbook_BeforeClose abläuft (in diesem Fall soll nichts gespeichert werden). Jedoch sollen nach Schliessen der Datei die Events auf True gesetzt sein
Ich habe mit folgendem Code versucht:
Sub XNichtSpeichern
Dim wbkThis As Excel.Workbook
Set wkbThis = ThisWorkbook
Application.DisplayAlerts = False
Application.EnableEvents = False
wkbThis.Close False
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Es klappt alles, ausser, dass nach wkbThis.Close False die Alerts und die Events nicht mehr auf TRUE gesetzt werden.
Gibt es eine andere Möglichkeit, dies zu erreichen?
Gruss, Peter
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Application.EnableEvents wieder einschalten
11.07.2012 12:51:30
Franc
es gab noch ein Befehl wo man das ohne Public übergeben konnte aber ich weiß den nimmer ...
Public blNichtspeichern As Boolean
Sub Workbook_BeforeClose(Cancel As Boolean)
If blNichtspeichern = False Then
Application.DisplayAlerts = False
Application.EnableEvents = False
Call BereicheDefinieren
Call xSpeichern
Application.DisplayAlerts = True
Application.EnableEvents = True
End If
End Sub

Sub XNichtSpeichern()
blNichtspeichern = True
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

Anzeige
AW: Application.EnableEvents wieder einschalten
11.07.2012 12:52:42
Franc
*kotz* ^^
Public blNichtspeichern As Boolean
über dem makro muss natürlich rein - also nicht übersehen weil es nicht blau markiert ist ^^
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Application.EnableEvents wieder aktivieren in Excel VBA


Schritt-für-Schritt-Anleitung

Um Application.EnableEvents in Excel VBA wieder zu aktivieren, kannst Du folgenden Vorgehensweise befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".
  3. Füge den folgenden Code ein:

    Sub Workbook_BeforeClose(Cancel As Boolean)
       Application.DisplayAlerts = False
       Application.EnableEvents = False
       Call BereicheDefinieren
       Call xSpeichern
       Application.DisplayAlerts = True
       Application.EnableEvents = True
    End Sub
  4. Kreiere eine Funktion, um das Schließen zu steuern:

    Sub XNichtSpeichern()
       Dim wbkThis As Excel.Workbook
       Set wbkThis = ThisWorkbook
       Application.DisplayAlerts = False
       Application.EnableEvents = False
       wbkThis.Close False
       Application.DisplayAlerts = True
       Application.EnableEvents = True
    End Sub
  5. Starte das Makro:

    • Führe das XNichtSpeichern-Makro aus, um die Datei zu schließen, ohne das Workbook_BeforeClose-Event auszulösen.

Häufige Fehler und Lösungen

  • Problem: Nach dem Schließen der Datei sind EnableEvents nicht auf True gesetzt.

    • Lösung: Stelle sicher, dass die Zeile Application.EnableEvents = True im Workbook_BeforeClose Event nach dem Schließen der Datei ausgeführt wird.
  • Problem: Makro funktioniert nicht wie erwartet.

    • Lösung: Prüfe, ob Du den blNichtspeichern-Variablen korrekt deklariert hast, z.B.:
      Public blNichtspeichern As Boolean

Alternative Methoden

Eine andere Möglichkeit, EnableEvents zu steuern, ist das Setzen einer globalen Variable. Beispiel:

Public blNichtspeichern As Boolean

Sub Workbook_BeforeClose(Cancel As Boolean)
    If blNichtspeichern = False Then
        Application.DisplayAlerts = False
        Application.EnableEvents = False
        Call BereicheDefinieren
        Call xSpeichern
        Application.DisplayAlerts = True
        Application.EnableEvents = True
    End If
End Sub

Hierbei wird die globale Variable blNichtspeichern verwendet, um zu entscheiden, ob das Event ausgeführt werden soll oder nicht.


Praktische Beispiele

Wenn Du ein Workbook hast, das nicht gespeichert werden soll, kannst Du diesen Code verwenden:

Sub XNichtSpeichern()
    blNichtspeichern = True
    ThisWorkbook.Saved = True
    ThisWorkbook.Close
End Sub

Dies sorgt dafür, dass Excel die Änderungen nicht speichert und das Workbook schließt, ohne das Workbook_BeforeClose Event auszulösen.


Tipps für Profis

  • Nutze Application.EnableEvents = False sparsam, um unerwartete Verhaltensweisen in anderen Makros zu vermeiden.
  • Denke daran, immer Application.EnableEvents = True zurückzusetzen, damit andere Events in Excel wieder funktionieren.
  • Berücksichtige, dass das Deaktivieren von Events auch Auswirkungen auf andere laufende Makros haben kann.

FAQ: Häufige Fragen

1. Was bewirkt Application.EnableEvents = False?
Es deaktiviert alle Ereignisse in Excel, sodass z.B. kein Workbook_BeforeClose Event ausgelöst wird.

2. Wie setze ich Application.EnableEvents wieder auf True?
Füge einfach die Zeile Application.EnableEvents = True in Dein Makro ein, nachdem Du die gewünschten Aktionen durchgeführt hast.

3. Kann ich Application.EnableEvents ohne ein Makro aktivieren?
Nein, diese Funktionalität ist nur über VBA-Makros steuerbar.

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