Ответ 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
Макросы Excel, похоже, не позволяют использовать "отмену" после их запуска. Есть ли способ испечь функциональность undo
в макросе VBA в Excel?
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...
Он не будет очень хорошо интегрироваться с "настоящим" отменом, но я не думаю, что это возможно.