Страницы: 1
RSS
Запрет закрытия Книги крестиком
 
Добрый день!
Понимаю, тема не однократно поднималась, не стал поднимать из архива.
В Excel 2003-2007 вопрос решался обработкой Workbook_BeforeClose:
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   If Sheets("Лист1").Range("A1").Value <> 1 Then
       MsgBox ("Воспользуйтесь такой-то кнопкой")
       Cancel = True
   End If
End Sub
Столкнулся с тем, что Excel 2016 плевать хотел на Cancel = True. Вываливает запрос сохранить книгу перед закрытием или нет, или отмена.
Может кто сталкивался? Как побороли?
 
Цитата
roka: Вываливает запрос
если проблема только в этом (то есть книга не закрывается), то управление такими "окнами" осуществляется через Application.DisplayAlerts=True/False
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Суть не в этом, суть в том что Excel игнорирует Cancel = True и ведет к закрытию книги, а мне надо чтобы книга не закрывалась
 
roka, тогда вот тут разбирали похожее

UPD:
Цитата
roka: Excel игнорирует Cancel = True и ведет к закрытию книги
у меня на 2016 всё нормально работает
Код
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
MsgBox 1
End Sub
Изменено: Jack Famous - 11.09.2019 11:59:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
roka написал:
Столкнулся с тем, что Excel 2016 плевать хотел на Cancel = True
Проверил на нескольких конфигурациях Excel 2016, всё отрабатывает штатно.
У Вас выдается сообщение Msgbox из #1, а вслед за этим начинается сохранение книги?
Владимир
 
а вслед за этим окно: сохранять, не сохранять перед выходом, отмена

Jack Famous, да проблема схожа с sokol92
Версия 16.0.4849.1000 64-разрядная
 
Цитата
roka написал:
проблема схожа с  sokol92
У меня нет такой проблемы, в этом и сложность.

Откройте "чистый" Excel, проверьте, что нет никаких надстроек. В новой  книге добавьте макрос из #1 и закройте книгу. Поведение то же?
Владимир
 
Цитата
sokol92: добавьте макрос из #1
приветствую, Владимир! Лучше из #5 - меньше побочки, да и файл уже есть, только раскомментировать надо
Изменено: Jack Famous - 11.09.2019 14:05:28
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
sokol92 написал:
Откройте "чистый" Excel, проверьте, что нет никаких надстроек.
Спасибо! Отрубил надстройку от IBM и проблема ушла. Придется писать в IBM и долго, долго ждать пока пофиксят :(
 
Механизм понятен.
В надстройке есть обработка события объекта Application закрытия любой книги (WorkbookBeforeClose).
Вы закрываете книгу, обрабатывается событие книги BeforeClose, выдается Msgbox (#1) и параметру Cancel присваивается значение True.
Далее это же событие обрабатывается надстройкой. 99% авторов надстроек не анализируют входящее значение параметра Cancel (а оно при входе True) и, следовательно, не понимают, что предыдущий обработчик события хочет прекратить дальнейшую обработку.
Надстройка делает свое дело и устанавливает по собственной логике Cancel=False.
Далее, управление возвращается Excel, анализируется значение Cancel (False) и, следовательно, выполняются действия по умолчанию.
Владимир
Страницы: 1
Наверх