Создание отмены в макрос VBA Excel - PullRequest
21 голосов
/ 04 декабря 2008

Макросы Excel, по-видимому, не позволяют использовать «отмену» после их запуска. Можно ли как-нибудь внедрить функциональность undo в макрос VBA в Excel?

Ответы [ 3 ]

22 голосов
/ 04 декабря 2008

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
6 голосов
/ 23 декабря 2008

Моя мысль довольно проста: в первой строке макроса сохраните копию в каталоге резервных копий, затем закройте эту книгу и снова откройте оригинал. Если вам не нравятся результаты выполнения макроса, откройте сохраненную книгу. Будь проще, а?

3 голосов
/ 04 декабря 2008

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

Запекая его в настоящий макрос, вы должны будете в основном записывать старое состояние всего, что изменяется (содержимое ячейки, формулы, форматирование и т. Д.) В списке, а затем иметь макрос отмены, который воспроизводит этот список в обратном заказ.

Например, если ваш макрос изменяет содержимое ячейки C22 с «3» на «7» и форматирует с «общего» на «число, 2 десятичных знака), ваш список будет:

C22 value  3
C22 format general

Воспроизведение этого в обратном порядке (с другим макросом) отменит изменения.

У вас может быть целый дополнительный лист для хранения информации об отмене макросов, такой как:

Step   Cell   Type    Value
----   ----   -----   -------
   1   C22    value         3
       C22    format  general
   2...

К сожалению, это не очень хорошо сочеталось бы с «настоящей» отменой, но я не думаю, что есть какой-то способ обойти это.

...