Подтвердить что ты не робот

Создание Отменить в Excel VBA Macro

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

4b9b3361

Ответ 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...

Он не будет очень хорошо интегрироваться с "настоящим" отменом, но я не думаю, что это возможно.