Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Eine Sub Workbook_BeforeClose abbrechen
#1
Hallo Freunde,

ich habe hier ein Formular, welches in der Workbook_BeforeClose Sub nachfragt, ob es schon gespeichert worden ist oder ob es ungespeichert geleert und geschlossen werden soll.

Dazu müsste die BeforeClose Sub abgebrochen werden können, ohne dass die Datei geschlossen wird. Folgenden Code dazu habe ich bis jetzt:

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If ThisWorkbook.Name = MyName Then
        Warnung.Show
        If Flag = False Then GoTo weiter
        Cancel = False
        Exit Sub
    End If
weiter:
    With Sheets("Rechnung")
        .Range("Address").ClearContents
        .Range("Ansprache").ClearContents
        .Range("Textteil").ClearContents
        .Range("Beträge").ClearContents
    End With
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=MyPfad & "\" & MyName
End Sub

Leider wird die Sub damit nicht abgebrochen, sondern das Schließen beendet.

Gehe ich mit F8 schrittweise vor, erhalte ich folgende Excel-Abfrage:
"Änderungen speichern? Ja - Nein -Abbrechen" • wähle ich "Abbrechen" wird die BeforeClose Sub unterbrochen und das Formular bleibt stehen.

Wie muss bzw. kann ich dieses Verhalten in meinen vorstehenden Code einfügen?
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#2
Hallo Günter,

eventuell reicht Cancel = True ?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Moin!
Ergänzend zu Andrés Hinweis drei Fragen:
  1. Warum soll die Systemmeldung durch ein UserForm "Warnung" ersetzt werden?
  2. If ThisWorkbook.Name = MyName? ThisWorkbook in einer (zusätzlichen) Variablen?
  3. Warum dieser Spaghetticode?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#4
@RPP

Vielleicht übersetzt Attilla 'Spaghetti' in "Nudel' ;)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Hallo,

erst einmal vielen Dank an André, so einfach war die Lösung!

Nun zu den Fragen von Ralf:
Zu 1. Die Nachfrage des Systems ist mir nicht deutlich genug und läßt keine weiteren Fragen und Entscheidungen zu dem Vorgang zu!
Zu 2. In MyName wird beim Workbook_open der Name ausgelesen und beim Schließen geprüft, ob der noch übereinstimmt, da damit der Nachweis des noch nicht Speichern erbracht wird. Die Vorlage kann nicht als Excel-Vorlage gespeichert werden, sondern als normale Datei und deshalb wird alles danach gelöscht und unter dem Namen der Öffnung (also MyName) leer wieder gespeichert, weil inzwischen einige Parameter für einen erneuten Aufruf geändert worden sind, die sonst verloren gehen.
Zu 3. Ich sehe keinen Spagetthicode - was soll das übrigens sein?

Wenn ich ein Projekt realisiere versuche ich das immer idiotensicher zu machen und setze keine Excelkenntnisse voraus - damit bin ich bisher immer seht gut angekommen und alle haben das begrüßt.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#6
Zitat:Zu 1. Die Nachfrage des Systems ist mir nicht deutlich genug und läßt keine weiteren Fragen und Entscheidungen zu dem Vorgang zu!
Das sollte man schon bevor das schliessen der Datei erledigt haben.

Jedes redundantes Bemühen des Users sollte man ausschliessen.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#7
Hi Günter,

(27.02.2017, 00:03)Glausius schrieb: Zu 3. Ich sehe keinen Spagetthicode - was soll das übrigens sein?

Spaghetticode ist ein Code der Gotos verwendet.

Dein Code könnte auch so als Nicht-Spaghetti geschrieben werden (ich hoffe, das "Cancel = True" ist an der richtigen Stelle):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If ThisWorkbook.Name = MyName Then
     Warnung.Show
     
     If Flag = False Then
        With Sheets("Rechnung")
           .Range("Address").ClearContents
           .Range("Ansprache").ClearContents
           .Range("Textteil").ClearContents
           .Range("Beträge").ClearContents
        End With
        Application.DisplayAlerts = False
        ThisWorkbook.SaveAs Filename:=MyPfad & "\" & MyName
     Else
        Cancel = True
        Exit Sub
     End If
  End If
End Sub
Antworten Top
#8
Hallo Ralf,

danke für den "entspaghettisierten" Code, er läuft genau, wie er soll!

@snb


Mit solchen Hinweisen sollte man ohne das Projekt überhaupt zu kennen, m.E. sehr vorsichtig sein - Fettnäpfchen stehen überall!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#9
Da irrst du dich: diese Hinweisen gelten für alle Projekte, eben deine.
Dazu braucht man sie nicht zu kennen.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste