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

Datei schliessen abbrechen, wenn MsgBox = vbNo

Forumthread: Datei schliessen abbrechen, wenn MsgBox = vbNo

Datei schliessen abbrechen, wenn MsgBox = vbNo
16.01.2009 20:06:00
Andreas
Hallo Herber Fans,
es ist vermutlich nur ein kleiners Problem, aber meine Recherche im Archiv hat leider keine Lösung zu Tage gefördert.
Ich prüfe vor dem Schließen einer Datei, ob alles richtig befüllt wurde. Wenn nicht, dann kann der User über eine vbYesNo MsgBox entscheiden, ob er doch schließen will und den Fehler akzeptiert oder ob er noch einmal nachbessern will.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If msgbox("das ist was falsch, willst du wirklich schließen", vbYesNo, "Test") = vbNo then
Hier die Zeile, die das Schließen verhindert
end if
End Sub


Ich habe schon mit END experimentiert, aber der Befehl zum Schließen kommt ja nicht aus der VBA Umgebung, sondern wird durch den Klick auf das Schließkreuz der Datei ausgelöst. Über VBA kann ich diesen Vorgang nicht erreichen.
Weiß jemand von Euch Rat?
Vielen Dank und Gruß, Andreas

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei schliessen abbrechen, wenn MsgBox = vbNo
16.01.2009 20:10:14
Hajo_Zi
Hallo Andreas,
Cancel =true

AW: Datei schliessen abbrechen, wenn MsgBox = vbNo
16.01.2009 20:18:00
Andreas
Hallo HaJo,
das ist ja ein Zufall... ich war heute auf Deiner Seite für eine Hilfe zu Application.Ontime. Hat funktioniert :-)
Zu diesem Cancel Thema noch einmal. Wie kann ich den Abbruch realisieren, wenn es sich so darstellt:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call KonsistenzPruefung
End Sub


und die vorgenannte Messagebox Prüfung, die mit "No" enden kann, in dem Sub KonsistenzPruefung erfolgt? Muß ich da eine extra Boolsche Variable deklarieren, die vom Before Close Sub ausgewertet wird, oder geht es eleganter?
Wenn ich 'Cancel = True' in den Sub KonsistenzPruefung packe, kommt der Debugger.
Dank und Gruß, Andreas

Anzeige
AW: Datei schliessen abbrechen, wenn MsgBox = vbNo
16.01.2009 20:25:00
Hajo_Zi
Hallo Andres,
ich kenn Dein Makro nicht. Ich erssten Beitrag Stand
If msgbox("das ist was falsch, willst du wirklich schließen", vbYesNo, "Test") = vbNo then
Hier die Zeile, die das Schließen verhindert
end if
und dort kommt es vor End if
Gruß Hajo
Anzeige
AW: Datei schliessen abbrechen, wenn MsgBox = vbNo
16.01.2009 20:31:55
Andreas
Hallo HaJo,
ein Beispiel sagt mehr:

Die Datei https://www.herber.de/bbs/user/58497.xls wurde aus Datenschutzgründen gelöscht


Dank und Gruß, Andreas
AW: Datei schliessen abbrechen, wenn MsgBox = vbNo
16.01.2009 20:41:00
Hajo_Zi
Hallo Andreas,
Du mußt die Msgbox wie im ersten Beitrag unter BeforeClose machen.
Gruß Hajo
Anzeige
AW: Datei schliessen abbrechen, wenn MsgBox = vbNo
16.01.2009 20:50:38
Andreas
Hallo HaJo,
OK. Werde das so machen.
Haben noch einen schönen Abend.
Grüße, Andreas
;
Anzeige
Anzeige

Infobox / Tutorial

Datei schließen abbrechen mit MsgBox in Excel VBA


Schritt-für-Schritt-Anleitung

Um einen Excel Vorgang abzubrechen, wenn der Benutzer in einer MsgBox auf "Nein" (vbNo) klickt, kannst Du den folgenden VBA-Code verwenden. Dieser wird im Workbook_BeforeClose-Ereignis platziert:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("Das ist was falsch, willst du wirklich schließen?", vbYesNo, "Test") = vbNo Then
        Cancel = True ' Schließen abbrechen
    End If
End Sub
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Doppelklicke auf "Diese Arbeitsmappe" im Projektfenster.
  3. Füge den obigen Code in das Editorfenster ein.
  4. Schließe den VBA-Editor und teste das Verhalten, indem Du die Arbeitsmappe schließt.

Häufige Fehler und Lösungen

  • Fehler: MsgBox wird nicht angezeigt.
    Lösung: Stelle sicher, dass der Code im Workbook_BeforeClose-Ereignis platziert wurde.

  • Fehler: Cancel = True hat keine Wirkung.
    Lösung: Überprüfe, ob der Code richtig in das Workbook_BeforeClose-Ereignis integriert ist.

  • Fehler: Debugger wird aktiviert.
    Lösung: Achte darauf, dass alle Variablen korrekt deklariert sind und der Code keine unerwarteten Fehler verursacht.


Alternative Methoden

Eine alternative Methode besteht darin, eine separate Funktion für die Konsistenzprüfung zu erstellen und den Abbruch in dieser Funktion zu handhaben. Hier ist ein Beispiel:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call KonsistenzPruefung(Cancel)
End Sub

Private Sub KonsistenzPruefung(ByRef Cancel As Boolean)
    If MsgBox("Das ist was falsch, willst du wirklich schließen?", vbYesNo, "Test") = vbNo Then
        Cancel = True ' Schließen abbrechen
    End If
End Sub

In diesem Ansatz wird die Schließlogik in einer separaten Subroutine behandelt, was die Wartbarkeit des Codes verbessert.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du die MsgBox in verschiedenen Szenarien verwenden kannst:

  1. Prüfen von Eingaben: Wenn Du sicherstellen möchtest, dass bestimmte Felder vor dem Schließen ausgefüllt sind, kannst Du dies mit einer Abfrage in der MsgBox kombinieren.

  2. Einfache Validierung: Nutze die MsgBox, um den Benutzer zu warnen, wenn wichtige Daten fehlen.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If IsEmpty(Sheet1.Range("A1").Value) Then
        If MsgBox("Das Feld A1 ist leer. Willst du trotzdem schließen?", vbYesNo, "Warnung") = vbNo Then
            Cancel = True ' Schließen abbrechen
        End If
    End If
End Sub

Tipps für Profis

  • Nutze benutzerdefinierte MsgBox-Texte, um den Benutzern klarere Informationen zu geben.
  • Erstelle eine globale Fehlerbehandlungsroutine, um unerwartete Fehler zu fangen.
  • Teste Deinen Code gründlich, um sicherzustellen, dass alle möglichen Szenarien abgedeckt sind.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Bedingungen in der MsgBox abfragen?
Du kannst mehrere If-Anweisungen oder Select Case verwenden, um verschiedene Antworten zu verarbeiten.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, dieser Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen.

3. Was ist der Unterschied zwischen vbYes und vbNo?
vbYes wird verwendet, wenn der Benutzer "Ja" wählt, und vbNo, wenn der Benutzer "Nein" wählt.

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