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

Forumthread: vbYesNoCancel

vbYesNoCancel
13.06.2006 21:23:08
Bräuer
Hallo zusammen,
hab da eine Umsetzungsproblem beim nachbilden einer Speicherabfrage mittels vbYesNoCancel –MsgBox.
Hab zu dem Thema auch nix gefunden.
So, bei schließen der Arbeitsmappe über FENSTER SCHLIEßEN wird Private Sub Workbook_BeforeClose(Cancel As Boolean) aktiv und eine vbYesNoCancel- MsgBox aufgerufen, welche auf soweit funktioniert.
Bei Ja, werden einige Sub´s abgearbeitet, die Arbeitsmappe gespeichert und geschlossen.
Bei Abbrechen wird cancel = true ausgeführt und alles bleibt wie bisher.
Bei Nein hab ich das Problem das ich noch einige Sub´s abarbeiten möchte und nur diese jetzt erzeugten Änderungen speichern möchte, aber nicht die vorhergehenden.
Muss also, denke ich zumindest, die Änderungen verwerfen welche vom Zwischenspeichern bis zum Betätigen des Nein -Buttons in der MsgBox angefallen sind Rückgängig machen.
Dann die Sub´s ausführen die Arbeitsmappe speichern und beenden.
Oder ?
Wie geht den so Was ?
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vbYesNoCancel
13.06.2006 22:11:12
Matthias
Hallo Markus,
Bei Nein hab ich das Problem das ich noch einige Sub´s abarbeiten möchte und nur diese jetzt erzeugten Änderungen speichern möchte, aber nicht die vorhergehenden.
Das hab ich nicht ganz verstanden... Welche vorhergehenden?
Du kannst die Standard-Speicherroutine umgehen, wenn du innerhalb der Before-Close-Routine die Mappe speicherst:
Ansatz:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error GoTo errhandler
Select Case MsgBox("Frage?", vbYesNoCancel)
Case vbYes
'tu dies
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
Case vbNo
'tu das
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
Case vbCancel
Cancel = True
End Select
Exit Sub
errhandler:
Application.EnableEvents = True
MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
End Sub

So, und nun weiter Fußball gucken... ;-)
Gruß Matthias
Anzeige
AW: vbYesNoCancel
14.06.2006 17:34:58
Bräuer
Hallo Matthias,
eben nicht so !!!
Also ich öffne neine Arbeitsmappe mache verschiedene Einträge und Speicher diese ab (z.B. manuell).
Änder noch so dies und das und schließe die Arbeitsmappe.
Jetzt kommt der Dialog mit vbYesNoCancel.
Nach betätigen des NEIN -Buttons möchte ich nätürlich nicht die Änderungen nach dem Speichervorgang übernehmen sondern verwerfen.
Allerdings möchte ich jetzt noch das Arbeisblatt mittels VBA bearbeiten und nur noch diese Änderungen speichern.
Für alle Bemühungen bereits besten Dank im Voraus
Anzeige
AW: vbYesNoCancel
14.06.2006 17:56:41
Matthias
Hallo Markus,
Allerdings möchte ich jetzt noch das Arbeisblatt mittels VBA bearbeiten und nur noch diese Änderungen speichern.
Wieso machst du diese VBA-Eingriffe nicht vor jedem Speichern in der Before_Save()-Routine?
Irgendwie erkenne ich da keine Logik...
Gruß Matthias
Anzeige
;
Anzeige

Infobox / Tutorial

vbYesNoCancel in Excel VBA korrekt umsetzen


Schritt-für-Schritt-Anleitung

Um die vbYesNoCancel-Funktion in Excel VBA korrekt zu verwenden, kannst du folgende Schritte befolgen:

  1. Öffne die VBA-Entwicklungsumgebung:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge den Code in das Arbeitsmappenmodul ein:

    • Wähle im Projekt-Explorer das Arbeitsmappenmodul aus (z. B. ThisWorkbook).
    • Füge den folgenden Code ein:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       On Error GoTo errhandler
       Select Case MsgBox("Möchten Sie die Änderungen speichern?", vbYesNoCancel)
           Case vbYes
               Application.EnableEvents = False
               ThisWorkbook.Save
               Application.EnableEvents = True
           Case vbNo
               ' Änderungen verwerfen
               Application.EnableEvents = False
               ThisWorkbook.Saved = True ' Markiert die Mappe als gespeichert
               Application.EnableEvents = True
               ' Hier kannst du weitere Subroutinen aufrufen
           Case vbCancel
               Cancel = True
       End Select
       Exit Sub
    errhandler:
       Application.EnableEvents = True
       MsgBox Err.Description, vbCritical, "Fehler " & Err.Number
    End Sub
  3. Testen des Codes:

    • Speichere deine Arbeitsmappe und schließe sie, um die Funktionalität der msgbox vbyesnocancel zu testen.

Häufige Fehler und Lösungen

  • Fehler: Änderungen werden nicht verworfen
    Lösung: Stelle sicher, dass du ThisWorkbook.Saved = True im vbNo-Fall verwendest. Dadurch wird die Arbeitsmappe als gespeichert markiert, was das Verwerfen der Änderungen ermöglicht.

  • Fehler: MsgBox zeigt nicht die korrekten Optionen an
    Lösung: Überprüfe den Select Case-Befehl und stelle sicher, dass du die richtigen Konstanten (vbYes, vbNo, vbCancel) verwendest.


Alternative Methoden

Falls die oben beschriebene Methode nicht deinen Anforderungen entspricht, könntest du auch die Before_Save-Routine nutzen, um die Änderungen vor dem Speichern zu bearbeiten. Hier ist ein Beispiel:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' Hier kannst du die gewünschten Änderungen vor dem Speichern vornehmen
End Sub

Diese Methode gibt dir die Möglichkeit, die Arbeitsmappe vor dem endgültigen Speichern zu modifizieren.


Praktische Beispiele

Du kannst den vbYesNoCancel-Dialog verwenden, um verschiedene Aktionen auszuführen. Hier ist ein Beispiel, wie du vor dem Schließen der Mappe zusätzliche Subroutinen aufrufen kannst, wenn der Benutzer "Nein" wählt:

Case vbNo
    Call DeineSubroutine

Ersetze DeineSubroutine durch den Namen deiner gewünschten Subroutine.


Tipps für Profis

  • Nutze Application.EnableEvents = False, um unerwünschte Ereignisse während des Speicherns zu vermeiden.
  • Dokumentiere deinen Code, insbesondere wenn du mehrere Subroutinen in der vbNo-Option aufrufst, um die Lesbarkeit zu erhöhen.
  • Berücksichtige auch die Nutzung von On Error-Routinen, um unerwartete Fehler während der Ausführung zu handhaben.

FAQ: Häufige Fragen

1. Wie kann ich die Arbeitsmappe automatisch speichern, wenn der Benutzer "Ja" wählt?
Antwort: Die Zeile ThisWorkbook.Save im vbYes-Fall sorgt dafür, dass die Arbeitsmappe gespeichert wird.

2. Was passiert, wenn ich "Abbrechen" wähle?
Antwort: Das Setzen von Cancel = True im vbCancel-Fall verhindert das Schließen der Arbeitsmappe.

3. Kann ich die vbYesNoCancel-MsgBox in anderen Kontexten verwenden?
Antwort: Ja, du kannst die MsgBox in verschiedenen VBA-Prozeduren verwenden, um Benutzerentscheidungen zu erfassen.

4. Welche Excel-Version benötige ich für diese Funktionen?
Antwort: Diese Funktionen sind in allen modernen Excel-Versionen verfügbar, die VBA unterstützen.

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