Вы подавили оповещения с Application.DisplayAlerts = False
. Удалите эту строку, и вы увидите, в чем проблема.
Когда предупреждения отключены, Excel использует параметр по умолчанию. В этом случае вы будете предупреждены, что файл уже существует, и Excel хочет, чтобы вы подтвердили, что это нормально, чтобы перезаписать. Параметр по умолчанию для этого «Да/Нет/Отмена» - «Нет», поэтому может показаться, что файл фактически не сохраняется.
Другая потенциальная проблема заключается в том, что вы можете ввести в заблуждение ThisWorkbook
и ActiveWorkbook
. Событие _BeforeClose
будет запускаться только из книги, в которой он находится, поэтому нет причин делать какие-либо проверки имени, предполагая, что вы всегда хотите сохранить книгу, в которой находится этот код, когда вы ее закрываете.
Вместо этого попробуйте:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
.WritePassword = "abc123"
.ReadOnlyRecommended = True
.Save
End With
End Sub
выше предположение не может иметь место, если рабочая книга закрывается программно, в этом случае вы может необходимо проводить различие между ThisWorkbook
и ActiveWorkbook
, но это трудно себе представить, почему при закрытии этой книги вы хотите сохранить другую (активную) книгу.
Кроме того, в комментарии Гэри выше (и я протестировал это), если вы не предоставляете полный путь, файл будет сохранен в папке «Документы» (по крайней мере, для меня в Excel 2013).
Вам может понадобиться сделать:
ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.FullName, FileFormat:=xlOpenXMLWorkbookMacroEnabled, WriteResPassword:="abc123", ReadOnlyRecommended:=True
В своем коде, как:
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
Не будучи грубо, но он меня поймал раньше, вы открываете правильный, чтобы проверить? если вы посмотрите в папке «Документы» (обычно C: \ users \ [USERNAME] \ документы \ [FileN \ me] .xlsm), она может быть там, вы не указали полный путь, поэтому можете помещать его в свои документы 'по умолчанию. –
Хорошая точка, но она экономит на ожидаемом месте. – JeffK627