Макросы Excel не позволяют использовать «отмену» после их запуска. Есть ли способ встроить undo
функциональность в макрос VBA в Excel?
Создание отмены в макросе Excel VBA
Ответы (3)
В Excel VBA для этого есть функция Application.OnUndo
:
Public Sub DoSomething
... do stuff here
Application.OnUndo "Undo something", "UnDoSomething"
End Sub
Public Sub UnDoSomething
... reverse the action here
End Sub
Моя мысль довольно проста, поскольку первая строка в вашем макросе сохраняет копию в каталоге резервных копий, затем закрывает эту книгу и повторно открывает оригинал. Если вам не нравятся результаты выполнения макроса, откройте сохраненную книгу. Будь проще, а?
Я всегда сохраняю сразу перед запуском своих макросов (по крайней мере, во время тестирования), тогда, если все пойдет не так, я могу просто выйти без сохранения и снова открыть его.
Включив его в фактический макрос, вам придется в основном записывать старое состояние всего, что изменяется (содержимое ячеек, формулы, форматирование и т. Д.) В списке, а затем иметь макрос отмены, который воспроизводит этот список в обратном порядке.
Например, если ваш макрос изменяет содержимое ячейки C22 с «3» на «7» и форматирует с «общего» на «число, 2 десятичных знака», ваш список будет выглядеть следующим образом:
C22 value 3
C22 format general
Воспроизведение этого в обратном порядке (с другим макросом) приведет к отмене изменений.
У вас может быть целый дополнительный лист для хранения информации об отмене макроса, например:
Step Cell Type Value
---- ---- ----- -------
1 C22 value 3
C22 format general
2...
К сожалению, это не очень хорошо сочетается с «настоящей» отменой, но я не думаю, что есть способ обойти это.