Clever-Excel-Forum

Normale Version: Schließ-Prozedur produziert Fehler
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen...

Eigentlich bin ich mit meiner Dienstplan-Vorlage, dank viel Hilfe, auch von hier, für's Internat fertig. Auch dem Anspruch, computerunerfahrenen Pädagogen das Erstellen von Dienstplänen zu erleichtern/ermöglichen, wird laut Rückmeldungen, die Vorlage ganz gut gerecht.

Aber Probleme mit der Schließ-Prozedur  wollen einfach nicht weichen:

Beim ersten Speichervorgang soll Dateiname und -erweiterung vorgegeben (also aus der xltm eine xlsm-Datei) werden.

Beim BeforeClose-Ereignis funktioniert beim ersten Mal alles wie vorgesehen, klickt man aber auf [Abbrechen] und will die Datei später schließen, ignoriert Excel den Code komplett. Ist eine zweite Excelmappe geöffnet, kann auch eine leere Mappe sein, klappts einwandfrei. Warum auch immer.

Ist die Mappe bereits eine xlsm-Datei und man will schließen, öffnet sich nach dem Klicken auf [Speichern] die "Speichern unter"-Dialogbox. Manchmal braucht Excel ein paar Sekunden, bis es sich dazu entscheidet, manchmal nicht, und neulich hat es sogar einfach gespeichert, wie es ja auch zu erwarten wäre. Nach Klicken auf [Abbrechen] schließt die Datei sogar ohne zu speichern!

Ich bekam schon den Tipp, die Anweisungen klarer zu formulieren, oder, besser noch, einen anderen Ansatz zu wählen. Aber ich bin Laie.

Der Code läuft übrigens anderswo reibungslos. Nicht auf unseren Internatsrechnern. Habe ihn auf mehreren Computern getestet. Immer dasselbe. Wir haben Windows 7 Professional (64 Bit) und Excel 2016 (32 Bit).

Weder sind Ereignis-Makros deaktiviert, noch ist Excel mit irgendwelchen Berechnungen beschäftigt. Habe den Code mit einer ansonsten leeren Mappe am frisch hochgefahrenen Rechner getestet - die Abläufe sind diesselben!

Die Abfrage "If Me.Path = "" Then" bringt übrigens keinen Unterschied. In einer anderen Datei hat das in einer anderen Prozedur den Unterschied gemacht.

Weiß jemand worans liegt oder hat - das wäre natürlich geil - einen Code, der möglicherweise auch bei uns läuft?

Viele Grüße
Uwe
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim bolWeiter As Boolean

   If Me.Saved = False Then
   Select Case MsgBox("Änderungen in " & "'" & Me.Name & "'" & " speichern?", vbYesNoCancel + vbQuestion, Me.Name)
       Case vbYes
           On Error Resume Next
           Application.EnableEvents = False
           If Len(Me.Path) Then
               Me.Save
           Else
               Do
                   bolWeiter = Application.Dialogs(xlDialogSaveAs).Show([H1] & " " & [A1] & " " & Format([D1], "YYYY-MM"), 52)
                   If Not bolWeiter Then
                       bolWeiter = MsgBox("Rückkehr zur Datei nicht möglich." & vbNewLine & _
                       "Ggf. speichern und erneut öffnen!" & vbNewLine & vbNewLine & "Schließen ohne zu speichern?", vbYesNo + vbInformation, Me.Name) = vbYes
                   End If
               Loop Until bolWeiter
               Me.Saved = True
           End If
           Application.EnableEvents = True
           On Error GoTo 0
           Application.Quit
       Case vbNo
           Me.Saved = True
           Application.Quit
       Case Else
           Cancel = True
   End Select
   Else
       Application.Quit
   End If

   Application.EnableAutoComplete = True

End Sub
Hi,

wird ein Fehler ausgeworfen?
Entferne "On Error Resume Next" und prüfe auf err.number und err.description
Hallöchen,

hast Du irgendwo in einem anderen Code die Standardexcelmeldungen ausgeschalten?
Ansonsten bekommst Du immer zuerst die Standardmeldung und nicht Deine programmierte. Sieht man daran, dass Du einen Speichern-Button vor dem Aufgehen des Speichern-Dialoges hast ... Smile

Wenn Du Abbrechen drückst, egal welches, sollte der Code nicht die Zeilen mit On Error durchlaufen …

Zum Testen kannst Du auch mal als erste Codezeile den Befehl Stop programmieren oder einen Haltepunkt setzen und den Code ab da mit F8 zeilenweise durchgehen.

Speichern unter bekommst Du bei Deinem Code übrigens nur bei einer neuen Mappe. Len(Me.Path) ergibt dann falsch.
Hallo Mase,

es kommt keine Fehlermeldung, in der Sache noch nie! Sonst hätte ich das geschrieben.

Ohne "On Error Resume Next" ergibt keinen Unterschied.


Hallo schauan,

bei mir kommt seit jeher immer zuerst meine Box.

Wie schon beschrieben, habe ich den Code in einer leeren Mappe, die als einzige geöffnet war, am frisch hochgefahrenen Rechner laufen lassen.

Mit F8 läuft der Code in allen Varianten bzw. Abzweigungen ebenfalls so, wie beschrieben.

Speichern unter soll ja nur in einer neuen Mappe, also meiner Vorlage auftauchen. Als .xlsm (also wenn Len(Me.Path) richtig ergibt) soll einfach nur gespeichert werden.


Frage: Der Support für Win 7 endet ja bald. Eigentlich leider. Aber kann ich mir Hoffnungen machen, dass der Code unter Win 10 läuft? Können die Probleme mit dem Code auch mit dem Zusammenspiel mit der Hardware zusammenhängen, mit der Prozessorarchitektur, was weiß ich?


Gruß
Uwe
Aus irgendeinem Grund ist bei Dir Application.EnableEvents auf False gesetzt.
Am besten Du debuggst den Code.
Hallöchen
Wegen W10 brauchst du dir keine Sorgen zu machen. Problematisch könnte ein Versionswechsel von Office werden und vor allem, falls absichtlich oder versehentlich auf 64 bit Office gewechselt wird. Sollte den hier geposteten Code nicht betreffen.
Moin,

programmiere zum Test mal vor dieser Zeile
Application.EnableEvents = True
und vor
End Sub
einen Stop oder setze dort einen Haltepunkt.

Dann drückst Du bei "Speichern Unter" Abbrechen und schaust, ob der Code dort irgendwo ankommt Sad