Sie haben Warnungen mit Application.DisplayAlerts = False
unterdrückt. Entfernen Sie diese Zeile und Sie werden sehen, was das Problem ist.
Wenn Warnungen deaktiviert sind, verwendet Excel die Standardoption. In diesem Fall werden Sie gewarnt, dass eine Datei bereits existiert, und Excel möchte, dass Sie bestätigen, dass das Überschreiben in Ordnung ist. Die Standardoption für diese Ja/Nein/Abbrechen ist "Nein", so scheint es, dass die Datei nicht gespeichert wird.
Das andere mögliche Problem ist, dass Sie ThisWorkbook
und ActiveWorkbook
verwirren können. Das Ereignis _BeforeClose
wird nur von der Arbeitsmappe ausgeführt, in der es sich befindet. Daher gibt es wohl keinen Grund für eine Namensüberprüfung, vorausgesetzt, Sie möchten die Arbeitsmappe immer dort speichern, wo sich dieser Code befindet, wenn Sie ihn schließen.
Stattdessen versuchen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
.WritePassword = "abc123"
.ReadOnlyRecommended = True
.Save
End With
End Sub
Die obige Annahme halten kann nicht, wenn die Arbeitsmappe programmatisch geschlossen wird, in welchem Fall Sie eine Unterscheidung zwischen ThisWorkbook
benötigen und ActiveWorkbook
, aber es ist schwer, sich vorzustellen, warum Wenn Sie diese Arbeitsmappe schließen, möchten Sie eine andere (aktive) Arbeitsmappe speichern.
Auch zu Garys Kommentar oben (und ich habe es getestet), wenn Sie nicht einen vollständigen Pfad angeben, wird die Datei in Ihrem Ordner Dokumente gespeichert (zumindest ist es für mich in Excel 2013).
Möglicherweise müssen Sie tun:
ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.FullName, FileFormat:=xlOpenXMLWorkbookMacroEnabled, WriteResPassword:="abc123", ReadOnlyRecommended:=True
in Ihrem Code wie:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ActiveWorkbook.Name <> "Shipping Manifest SaveAS Update.xlsm" Then
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.FullName, FileFormat:=xlOpenXMLWorkbookMacroEnabled, WriteResPassword:="abc123", ReadOnlyRecommended:=True
Application.DisplayAlerts = True
End If
End Sub
Nicht in der unhöflich aber es hat mich schon mal erwischt, öffnest du den richtigen zu überprüfen? Wenn Sie in Ihrem Ordner Dokumente suchen (normalerweise C: \ Benutzer \ [BENUTZERNAME] \ Dokumente \ [DateiN \ me] .xlsm), kann es sein, dass Sie keinen vollständigen Pfad angegeben haben, damit er in Ihre Dokumente eingefügt werden kann 'Ordner standardmäßig. –
Guter Punkt, aber es spart den erwarteten Standort. – JeffK627