Как отменить макрос в Excel

Обновлено: 24.11.2024

Использование макросов VBA в Excel может значительно сэкономить время. Вы можете автоматизировать множество повторяющихся задач и создавать новые функции и функции в Excel с помощью простых кодов макросов VBA.

Но в некоторых случаях может потребоваться удалить все макросы из книги Excel (или удалить только определенные макросы).

Это может быть в том случае, когда вы получаете книгу от кого-то еще и хотите, чтобы в ней не было макросов, или когда вы отправляете файл с макросами кому-то, а в квитанции они не нужны в книге.

В этом руководстве я покажу вам несколько очень простых способов удаления макросов из книги в Microsoft Excel.

Итак, приступим!

Это руководство охватывает:

Удалить все макросы, сохранив файл в формате XLSX

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

По замыслу у вас не может быть кода макроса VBA в формате файла XLSX. В противном случае он будет удален автоматически при сохранении файла Excel.

В Excel можно использовать макросы только в форматах .XLSM, .XLSB и более ранних форматах .XLS. При сохранении книги в любом другом формате макросы немедленно теряются.

Предположим, у вас есть файл с именем Example.xlsm (с макросами). Ниже приведены шаги по удалению всех макросов из этого файла:

Вот оно! Теперь ваш файл не содержит макросов.

Этот метод удобен тем, что удаляет все макросы из текущей книги Excel за один раз. Однако, если вы хотите удалить некоторые макросы и удалить некоторые, этот метод вам не подойдет (см. тот, который использует для этого диалоговое окно «Макрос»).

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

Удалить определенные макросы из диалогового окна макросов

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

И если вы хотите удалить все макросы, вы также можете это сделать.

Предположим, у вас есть файл с именем Example.xlsm, содержащий несколько макросов.

Ниже приведены действия по удалению макроса из этой книги:

Если вы хотите удалить несколько (или все) макросов, повторите шаги 4 и 5.

Примечание. Если вы не видите вкладку разработчика, нажмите здесь, чтобы узнать, как отобразить вкладку разработчика на ленте в Excel. Кроме того, вы также можете использовать сочетание клавиш — ALT + 8, чтобы открыть диалоговое окно макроса.

Кроме того, вы также можете нажать на вкладку "Виды", щелкнуть раскрывающийся список "Макросы", а затем выбрать параметр "Просмотр макросов". При этом также откроется диалоговое окно "Макросы".

Хотя этот метод прекрасно работает, он позволяет удалять только те макросы, которые хранятся в модуле в редакторе Visual Basic. Если у вас есть макросы событий (в определенных рабочих листах или ThisWorkbook) или макросы в личной книге макросов, их нельзя удалить с помощью этого метода.

Удалить модуль с макросом

Еще один способ удалить макросы — перейти в редактор Visual Basic и удалить макросы оттуда.

Этот метод дает вам максимальный контроль, поскольку вы можете получить доступ ко всем макросам (будь то в модуле, объектах или личной книге макросов).

Ниже приведены действия по удалению макроса из редактора Visual Basic:

Если у вас есть модуль с кодом, который вы хотите удалить, вы можете щелкнуть правой кнопкой мыши объект модуля и выбрать параметр «Удалить модуль».

Итак, вот три способа удаления макросов из книги Microsoft Excel.

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

Моя проблема в том, что если мы нажмем кнопку отправки, не завершив ее, или если мы нажмем ее дважды, сумма, которую я сохраняю на следующем листе, станет неточной. Есть ли способ отменить действия макроса в Excel? Я пытался использовать кнопку отмены, но это не сработало для макросов. Есть ли способ отменить это?

Можем ли мы добавить еще один макрос, который отменит работу предыдущего макроса?

не с нативными функциями, единственный способ сделать это через vba. Примеров, как это сделать, много, они довольно интенсивные.

Я бы порекомендовал вместо того, чтобы искать отмену, когда допущены эти ошибки, проверьте их перед отправкой.В вашем коде довольно легко составить оператор if, который выдает ошибку, если есть неполные поля или если значение суммы уже существует на втором листе. Не нужно беспокоиться об исправлении ошибок, если они не могут произойти.

Как уже упоминалось, отмена VBA довольно сложна. Я согласен с @DanDonoghue, вместо этого добавьте какую-нибудь проверку в свой код. Это намного проще и вызовет меньше головной боли при работе с функцией отмены, которая, я уверен, довольно быстро превратится в крысиное гнездо. ", если мы нажмем кнопку отправки, не завершив ее, или если мы нажмем ее дважды" - просто добавьте код, который гарантирует, что поля/ячейки/что-то еще заполнены. Кроме того, окно сообщения, возможно, говорит: «Это займет некоторое время, пожалуйста, не нажимайте «Отправить» снова»?

1 Ответ 1

Я согласен со всеми комментаторами, которые предположили, что наилучшей практикой является проверка начальных условий и/или входных значений, прежде чем разрешить макросу вносить какие-либо изменения. Однако проверка часто бывает очень сложной и совершенно непрактичной во многих ситуациях, когда "нам это нужно сейчас".

Я могу предложить две очень простые вещи:

1) Макрос сохраняет книгу до внесения каких-либо изменений, но не сохраняет книгу после внесения изменений. Таким образом, если вы видите, что что-то пошло не так, вы можете просто закрыть и снова открыть книгу, и вы вернетесь туда, где вы были до того, как макрос сделал то, что сделал макрос.

2) Перед выполнением каких-либо действий макрос должен сохранять копии любых затронутых листов, поэтому, если что-то пойдет не так, вы сможете вернуться (или создать макрос для возврата) к исходной точке.

Первый вариант требует наименьшего количества кода, всего лишь:

прежде чем позволить макросу делать то, что делает макрос.

Я часто использую этот метод при тестировании макросов.

Второй вариант немного сложнее, но ненамного:

Обратите внимание, что это активирует копию. При необходимости вы можете повторно активировать исходный рабочий лист следующим образом:

«МиссиЛюбовьExcel» написала в
сообщении новостей:41AE8C27-C02F-456E-8CF9-47BC5893BDC1@microsoft.com.
> После запуска макроса его можно "отменить"? Или есть второй макрос, который
> будет
> отменять любой только что запущенный предыдущий макрос?

См. примечания Джона Уокенбаха по отмене:

«МиссиЛюбовьExcel» написала в
сообщении новостей:41AE8C27-C02F-456E-8CF9-47BC5893BDC1@microsoft.com.
> После запуска макроса его можно "отменить"? Или есть второй макрос, который
> будет
> отменять любой только что запущенный предыдущий макрос?

Нет. Кнопки Назад нет. Запуск запускается, а удаленное исчезает. Вы можете
написать что-нибудь, чтобы отменить некоторые действия, но некоторые действия являются постоянными. Будьте
очень осторожны в том, что вы пишете, и подсказывайте любые действия, которые нельзя отменить.
Кнопка отмены также недоступна после запуска макроса. Вы можете использовать
application.undo во время работы макроса, чтобы отменить последнее действие,
последнее выполненное действие.
--
HTH.


"MissyLovesExcel" пишет:

> После запуска макроса можно ли его "отменить"? Или есть второй макрос, который
> отменяет любой предыдущий только что запущенный макрос?

Мисси, вы не можете отменить макрос, но вы можете вернуть файл в состояние,
которое было до запуска макроса с помощью этого кода:
Sub RevertFile()

wkname = ActiveWorkbook.path & "\" & ActiveWorkbook.Name
ActiveWorkbook.Close Savechanges:=False

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

"GregR" написал в сообщении
news:1133888422.012728.58540@g14g2000cwa.googlegroups.com.
> Мисси, вы не можете отменить макрос, но вы можете вернуть файл в состояние,
> которое было до запуска макроса с помощью этого кода:
> Sub RevertFile() < br />>
> wkname = ActiveWorkbook.path & "\" & ActiveWorkbook.Name
> ActiveWorkbook.Close Savechanges:=False
>
> Workbooks.Open FileName:= wkname
>
> End Sub
>
> HTH
>
> Грег
>

Эд, вы абсолютно правы, но если он не содержит команды сохранения,
это альтернатива восстановлению файла.

Вы предполагаете, что макрос просто делает что-то с файлом.
Один макрос может удалить гигабайты файлов с жесткого диска, испортить
реестр, обновить рабочий стол, повредить несколько баз данных, отправить по электронной почте много
нигерийского спама, что угодно. Буфер отмены должен быть бесконечным, поэтому
никто не может позволить себе его создать.

С наилучшими пожеланиями, Харальд

Харальд, я абсолютно согласен, и если какое-либо из опасений, высказанных
Харальдом или Эдом, относится к вашей ситуации, мое решение не сработает.Я
просто пытаюсь выразить решение для простого макроса, который воздействует только на
активный файл и не содержит команды сохранения. ХТН

Зарегистрированный пользователь Дата регистрации 05.06.2019 Местоположение Гонконг MS-Off Ver 2003 Сообщения 1

Первоначальное сообщение от GregR

Мисси, вы не можете отменить макрос, но вы можете вернуть файл в состояние,
которое было до запуска макроса с помощью этого кода:
Sub RevertFile()

wkname = ActiveWorkbook.path & "\" & ActiveWorkbook.Name
ActiveWorkbook.Close Savechanges:=False

Я зарегистрировался на этом форуме, чтобы иметь возможность сказать большое спасибо GregR.
Хотя другие критиковали код VBA, говоря, что он работает только в том случае, если вы не сохранили файл Excel после выполнения макроса (который вы теперь хотите отменить). Я думал, что это очевидно для опытных пользователей ПК.
Это не умаляет полезности вклада GregR.
Я использовал его код VBA, сохранил его, назначил пользовательской кнопке на панели инструментов Excel и вставил значок с реверсивной закругленной стрелкой.
Очень хорошо работает.
Я искал способ отменить макрос, используемый для сортировки диапазона Excel.
Вот оно.

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

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

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

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

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

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

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

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

Биография автора

На его счету более 50 научно-популярных книг и множество журнальных статей. Аллен Уайатт является всемирно признанным автором. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнайте больше об Аллене.

Читайте также: