Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > как отменить макрос в Exel


Автор: sergei3000 20.4.2006, 12:37
возможно ли сделать так, чтобы пользовательский макрос можно было отменить, как любое другое действие в MS Exel, путём нажатия на соответствующую кнопку?
а то после запуска макроса эта кнопка засеривается, и отменить действие (как и предшествовавшие ему другие действия) невозможно 

Автор: Naghual 20.4.2006, 12:45
Правильно настроить безопасность Офиса. 

Автор: likhobory 20.4.2006, 13:10
цитата из справки:
Цитата

Undo Method
Cancels the last user-interface action.
This method undoes only the last action taken by the user before running the macro, and it must be the first line in the macro. It cannot be used to undo Visual Basic commands
 

Автор: Staruha 20.4.2006, 20:40
Цитата

а то после запуска макроса эта кнопка засеривается

 Нажми  Еsc потом End. 

Автор: sergei3000 21.4.2006, 05:49
Цитата(Naghual @  20.4.2006,  12:45 Найти цитируемый пост)
Правильно настроить безопасность Офиса


настраивал на все возможные уровни безопасности макросов в параметрах экселя (если ты это имеешь в виду, если нет - поясни, пожалуйста). не помогает.


Цитата(likhobory @  20.4.2006,  13:10 Найти цитируемый пост)
цитата из справки


это я читал. думал, что, может, всё-таки есть какой-то способ...


Цитата(Staruha @  20.4.2006,  20:40 Найти цитируемый пост)
Нажми  Еsc потом End.


Esc, по-моему, прерывает макрос в момент его выполнения. а что делать, если макрос уже выполнен? тогда нажатие Esc ни к чему не приводит 

Автор: Дмит 21.4.2006, 08:16
Для того чтобы иметь возможность отмены, код VBA должен отслеживать изменения, проведенные макросом. Макрос должен быть готов отменить внесенные изменения при выборе пользователем команды Правка-Отмена.

Чтобы разрешить пользователю выполнять команду Правка-Отмена, воспользуйтесь методом OnUndo в качестве последнего оператора макроса. Этот метод позволяет указать текст, который отображается в опции меню Отмена, а также процедуру, вызываемую командой Правка=>Отмена. Например:
Application.OnUndo "Последний макрос", "MyUndoMacro"

В процедуре "MyUndoMacro" действия последнего макроса исправляются. В простейшем случае делается бэкап и восстанавливается полностью рабочий лист. 

Автор: sergei3000 21.4.2006, 14:13
Дмит, 

Спасибо!

появляется ещё один нескромный вопрос.
возможно ли сделать так, чтобы можно было отменить действия, предшествовавшие выполнению макроса. то есть чтобы как в экселе отменять можно было несколько последних операций, в том числе и макрос, и операции, произведённые до его выполнения?

п.с. получается лишь отменять действия, произведённые после запуска макруса (ну и макрос тоже) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)