Когда вы работаете в Excel, существует некоторая «подстраховка» в отношении вносимых вами изменений. Большинство людей знают, что если они что-то напутали, они могут быстро нажать Ctrl + Z, выбрать команду «Отменить» в меню «Правка» или с помощью инструмента «Отменить» на панели инструментов. Если вам не нравится то, что вы только что сделали, вы можете легко отменить это и вернуться к тому, как все было раньше.

Однако, когда вы запускаете макрос, макрос не «хорошо работает» со списком отмены. Фактически, запуск макроса полностью стирает список отмены, и поэтому вы не можете автоматически отменить результаты выполнения макроса. В Excel или VBA нет встроенной команды для сохранения списка отмены. Однако есть несколько способов решить эту проблему.

Если вы чувствуете, что можете отменить действие макроса, первое, что вы можете сделать, — это сохранить книгу перед запуском макроса. По сути, это дает вам версию книги «до макроса».

Если вы хотите позже вернуться к этой версии, просто закройте книгу без сохранения, а затем перезагрузите ее с диска.

Другой вариант — переосмыслить то, как вы делаете свои макросы. Если у вас есть макрос, который выполняет большую часть обработки информации на вашем листе, закодируйте макрос так, чтобы он поддерживал в памяти состояние всего, что он изменяет. Затем вы можете создать отдельный макрос, который считывает эту информацию и эффективно отменяет действие первого макроса.

Чтобы сделать этот подход действительно удобным, последним шагом в вашем основном макросе может быть «заполнение» информации в стеке отмены. Затем эту информацию можно использовать, но не пользователем, для «отмены» созданного вами макроса. Например, следующая макрокоманда может быть последней в вашем основном макросе:

Application.OnUndo "Primary Macro", "UndoPrimary"

После этой команды, когда пользователь просматривает список отмены, он или она увидит текст «Основной макрос». Если они выберут эту опцию из списка «Отменить», то ваш макрос «отмены» (UndoPrimary) будет выполнен.

Следует отметить, что этот подход не сохраняет то, что было в списке отмены до запуска макроса — похоже, нет способа сделать это. Когда ваш основной макрос будет запущен, в списке отмены будет только одна опция: Основной макрос.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (2060) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Preserving_the_Undo_List [Сохранение списка отмены].