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