Перехват формы сохранения книги Excel с помощью события закрытия книги
Работая с событием VBA закрытия книги Excel (Workbook_BeforeClose), можно столкнуться с проблемой, о которой будет рассказано в данной статье.
Допустим, перед закрытием книги Вам необходимо произвести удаление каких-нибудь листов или отчистить переменные, которые хранили информацию для нее. Если файл Excel был изменен, то предварительно пользователю будет выведен диалог с предложением сохранить изменения. Но пользователь может решить продолжить работать с текущей книгой и нажмет кнопку «Отмена». Вроде бы все в порядке, но процедура события BeforeClose уже сработала, удалив данные, которые могут теперь потребоваться.
Чтобы решить описанную проблему, нужно узнать, какая кнопка на форме сохранения была нажата. Стандартный диалог этого не позволяет, поэтому его нужно перехватить и подсунуть пользователю свою форму с запросом (код приведен ниже).
Private Sub Workbook_BeforeClose(Cancel As Boolean) Do Until ThisWorkbook.Saved ' Выводим сообщение пользователю с запросом о необходимости сохранения Select Case MsgBox( _ "Вы хотите сохранить изменения в файле " & ThisWorkbook.Name & "?", _ vbQuestion + vbYesNoCancel) Case vbYes If ThisWorkbook.Path = "" Then ' Выводим диалог "Сохранить как", если книга является новой Application.Dialogs(xlDialogSaveAs).Show Else ThisWorkbook.Save End If Case vbNo ThisWorkbook.Saved = True Case Else Cancel = True Exit Sub End Select Loop End Sub
После цикла может быть расположен любой код, который выполнится при условии успешного сохранения.
Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.