2012-01-11 2 views
7

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

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

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

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

+1

Является ли это на все файлы или только одну книгу? Если в одной книге dO есть какие-либо изменчивые функции, которые могут быть запущены при сохранении в этой книге? – brettdj

+0

Возникает только активная рабочая книга. И нет, у меня нет летучих функций в книге. – CamilB

+0

Просто попробовал с чистой книгой, и эта проблема не появляется. Я не знаю, что я делаю неправильно в первой книге, но я над этим работаю. Я буду писать все, что найду. – CamilB

ответ

15

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

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

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

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

И что это было :)

1

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

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

Событие workheet_change должно быть короткое замыкание, если этот флаг является истинным.

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