Макросы Excel, похоже, не позволяют использовать "отмену" после их запуска. Есть ли способ испечь функциональность undo
в макросе VBA в Excel?
Создание Отменить в Excel VBA Macro
Ответ 1
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
Ответ 2
Моя мысль довольно проста, так как первая строка вашего макроса сохраняет копию в резервном каталоге, а затем закрывает эту книгу и снова открывает оригинал. Если вам не нравятся результаты вашего макроса, потяните сохраненную книгу. Держите его простым, а?
Ответ 3
Я всегда сохраняю сразу перед запуском моих макросов (во время тестирования по крайней мере), тогда, если все идет грушевидно, я могу просто выйти без сохранения и снова открыть его.
Выпивая его в фактический макрос, вам придется в основном записывать старое состояние всего, что изменяется (содержимое ячейки, формулы, форматирование и т.д.) в списке, тогда есть макрос отмены, который воспроизводит этот список в обратном порядке порядок.
Например, если ваш макрос изменил содержимое ячейки C22 с "3" на "7" и форматирование с "общего" на "число, 2 десятичного знака" ), ваш список будет выглядеть следующим образом:
C22 value 3
C22 format general
Воспроизведение в обратном порядке (с помощью другого макроса) приведет к отмене изменений.
У вас может быть целая дополнительная листка для хранения информации об отмене макроса, например:
Step Cell Type Value
---- ---- ----- -------
1 C22 value 3
C22 format general
2...
Он не будет очень хорошо интегрироваться с "настоящим" отменом, но я не думаю, что это возможно.