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

Forumthread: AutoClose

AutoClose
28.09.2017 16:25:50
Hans-Jürgen
Hallo zusammen,
ich programmiere auf Arbeit ein kleines VBA-Makro in einer Excel-Datei. Zu meinem Nivau: gelernt über Tastaturaufzeichnung gepaart mit Kenntnissen aus Basic, darauf aufgebaut, aber das ganze "neumodische Schnickschnack" mit Eigenschaften und Methoden ist mir fremd.
Zu meinem Problem: Bevor die Datei geschlossen wird, soll eine Plausibilitätsprüfung durchgeführt werden. Ich habe schon mal im Internet gesurft und zwei Namen von Subs ermittetlt:
AutoClose()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Das erstere ist auf den ersten Blick prima. Doch wenn die Plausibilitätsprüfung fehlschlägt, soll sich die Datei nicht schließen (der Anwender bekommt das entsprechend angezeigt). Aber ganz egal, was ich da in dem IF-Zweig reinschreibe, er macht das Ding trotzdem zu. (ExitSub ist mir so eingefallen, Sendkey "ESC" hatte ich gelesen, hilft nichts.)
Das zweitere ist auf den ersten Blick auch prima, denn ich muss im IF-Zweig nur Cancel=True setzen. Aber mein Problem ist: Die Sub wird gar nicht aufgerufen, wenn ich mit dem "X" schließe.
Meine erste intuitive Lösung, die ineinander zu verschacheln

Sub Auto_Close()
Call Workbook_BeforeClose
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Prüfungen
End Sub

schlug natürlich fehl, weil der Aufruf Workbook_BeforeClose ein Argument braucht.
Meine zweite intuitive Lösung: Jemanden fragen, der sich auskennt ;-))
Ich glaube, dass ich das mit dem Private Sub Workbook_BeforeClose(Cancel As Boolean) irgendwie falsch anwende.
Falls das wichtig ist: Mein Projektexplorer besteht aus dem "Ordner" Excel-Objekten (Tabellen) und dem "Ordner" Module, worin all mein Text auf "Modul1" liegt. (Es sind verschiedene Makros)
Vielen Dank
Hans-Jürgen
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: AutoClose
28.09.2017 16:41:39
mmat
Hallo Hans,
das ist alles was du brauchst:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Prüfungen = False Then Cancel = True
End Sub
Übrigens: Das ganze "neumodische Schnickschnack" mit Eigenschaften und Methoden ist mir das erste mal irgend wann Mitte der 80er des vorigen Jahrhunderts begegnet. Das nannte sich damals Objektorientierte Programmierung :-D
vg, MM
Anzeige
AW: AutoClose
28.09.2017 16:44:32
UweD
Hallo
in ein Normales Modul ganz nach oben
Public TMP As Boolean


in DieseArbeitsmappe
Private Sub Workbook_BeforeClose(Cancel As Boolean)
TMP = False
Call Prüfungen
If Not TMP Then
Cancel = True
MsgBox "Speichern abgebrochen"
End If
End Sub



' dein bestehendes Makro ergänzen
Sub Prüfungen()
'mach was
'If ok then
TMP = True
'end if
End Sub



Autoclose brauchst du nicht
LG UweD
Anzeige
AW: AutoClose
28.09.2017 18:04:39
Hans-Jürgen
Hallo Uwe,
danke, das war es! Den Code in "DieseArbeitsmappe", das hat es gebracht.
Viele Grüße
Hans-Jürgen
AW: gern geschehen owt
29.09.2017 08:44:39
UweD
;
Anzeige

Infobox / Tutorial

AutoClose in Excel VBA: Schritt für Schritt zur Plausibilitätsprüfung


Schritt-für-Schritt-Anleitung

Um ein VBA-Makro in Excel zu erstellen, das die Datei vor dem Schließen einer Plausibilitätsprüfung unterzieht, befolge diese Schritte:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Modul erstellen:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Globale Variable deklarieren:

    • Füge oben in deinem Modul folgenden Code ein:
      Public TMP As Boolean
  4. Workbook_BeforeClose Sub erstellen:

    • Gehe zu "DieseArbeitsmappe" und füge den folgenden Code ein:
      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      TMP = False
      Call Prüfungen
      If Not TMP Then
         Cancel = True
         MsgBox "Speichern abgebrochen"
      End If
      End Sub
  5. Plausibilitätsprüfung implementieren:

    • Erstelle die Prüfungen Sub in deinem Modul:
      Sub Prüfungen()
      ' Hier deine Prüfungen implementieren
      ' Beispiel:
      If <Bedingung> Then
         TMP = True ' Prüfen, ob die Bedingungen erfüllt sind
      End If
      End Sub
  6. Speichern und Testen:

    • Speichere deine Änderungen und teste das Makro, indem du versuchst, die Datei zu schließen.

Häufige Fehler und Lösungen

  • Das Makro wird nicht aufgerufen:

    • Stelle sicher, dass der Code in "DieseArbeitsmappe" und nicht in einem normalen Modul steht.
  • Datei schließt trotz Plausibilitätsprüfung:

    • Überprüfe, ob die Bedingung in der Prüfungen Sub korrekt implementiert ist und dass TMP entsprechend gesetzt wird.
  • Fehlermeldungen in der VBA-Umgebung:

    • Achte darauf, dass alle Variablen korrekt deklariert sind und keine Tippfehler im Code vorhanden sind.

Alternative Methoden

Anstelle von Workbook_BeforeClose kannst du auch das Auto_Close Sub verwenden. Hier ist ein Beispiel:

Sub Auto_Close()
    If Prüfungen = False Then
        MsgBox "Bedingungen nicht erfüllt, Datei wird geschlossen."
        Exit Sub
    End If
    ThisWorkbook.Close
End Sub

Allerdings wird empfohlen, Workbook_BeforeClose zu verwenden, da es spezifisch für das Schließen der Arbeitsmappe gedacht ist.


Praktische Beispiele

Hier ist ein einfaches Beispiel für eine Plausibilitätsprüfung, die überprüft, ob eine Zelle leer ist:

Sub Prüfungen()
    If IsEmpty(Sheet1.Range("A1").Value) Then
        TMP = False
        MsgBox "Zelle A1 darf nicht leer sein!"
    Else
        TMP = True
    End If
End Sub

Das oben stehende Beispiel kannst du leicht anpassen, um verschiedene Bedingungen zu überprüfen.


Tipps für Profis

  • Verwende Debugging:

    • Setze Breakpoints im Code, um den Ablauf zu kontrollieren und sicherzustellen, dass die Variablen die erwarteten Werte haben.
  • Dokumentation:

    • Dokumentiere deinen Code gut, damit du später nachvollziehen kannst, was jede Sub macht.
  • Fehlerbehandlung:

    • Implementiere Fehlerbehandlungsroutinen, um unerwartete Fehler abzufangen.

FAQ: Häufige Fragen

1. Wie kann ich die Plausibilitätsprüfung anpassen? Du kannst die Prüfungen Sub nach deinen Bedürfnissen anpassen, indem du weitere Bedingungen hinzufügst.

2. Funktioniert das in allen Excel-Versionen? Ja, die beschriebenen VBA-Methoden sind in den meisten modernen Excel-Versionen verfügbar, einschließlich Excel 2010 und neuer.

3. Was mache ich, wenn das Makro nicht ausgeführt wird? Überprüfe, ob die Makros in deiner Excel-Datei aktiviert sind. Gehe zu Datei > Optionen > Sicherheit > Makroeinstellungen.

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