Как остановить Excel от запуска Worksheet_Change перед Workbook_BeforeSave? - PullRequest
13 голосов
/ 11 января 2012

Обновление: проблема решена Мой коллега менял ячейку в течение Workbook_BeforeSave() без отключения событий, поэтому вызывал Worksheet_Change(). Да, глупо, но, по крайней мере, это наша вина, а не в Excel

Я заметил, что всякий раз, когда я нажимаю Ctrl + S в Excel, Worksheet_Change() запускается до Workbook_BeforeSave(). Можно ли подавить это поведение с помощью кода VBA, но без подавления всех событий (т.е. без Application.EnableEvents = false)?

Это происходит независимо от того, что я делаю. Я читал о ком-то, у кого была похожая проблема с ComboBoxes, но я не редактирую ComboBoxes, но Worksheet_Change() всегда срабатывает перед сохранением.

Есть идеи? Я только пытаюсь выяснить, как обойти некоторый код внутри Worksheet_Change() при сохранении документа, потому что этот код должен выполняться только тогда, когда пользователь действительно что-то меняет, а не когда рабочая книга сохраняется. Экономия ни в коем случае не меняется ...

Ответы [ 2 ]

24 голосов
/ 05 апреля 2012

Это была ошибка кодирования с нашей стороны:

Мой коллега менял ячейку во время Workbook_BeforeSave () без отключения событий, поэтому вызывал Worksheet_Change ().

Исправить было легко. В Workbook_BeforeSave ():

Application.EnableEvents = False
' Some final changes
Application.EnableEvents = True

И это было все:)

2 голосов
/ 04 апреля 2012

Добавить глобальную переменную флага.

Введите функцию, которая срабатывает при нажатии клавиши и, если CTRL + S, устанавливает для флага значение true.

Событие worksheet_change должно замыкаться, если этот флаг имеет значение true.

И workbook_aftersave должен изменить его обратно на false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...