Как остановить выполнение макроса в excel Excelka.ru - все про Ексель

Как остановить выполнение макроса в excel

Остановка выполнения Excel Macro при нажатии Esc не будет работать

Я запускаю excel 2007 на XP.

Есть ли способ остановить выполнение макроса во время его выполнения, кроме нажатия escape? Обычно, если я думаю, что я создал цикл infinate или иначе что-то испортил, я нажал кнопку escape, и он выдает ошибку, но макрос останавливается.

На этот раз (и я сделал это раньше, но не так плохо), я установил msgbox для быстрой отладки. Оказывается, он должен был зацикливаться около 6000 раз, что означает, что я должен был «ОК» 6000 ящиков сообщений, что заняло несколько минут. Я не сохранил перед запуском (еще одна ошибка), поэтому я не смог открыть диспетчер задач для выхода.

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

Используйте CRTL + BREAK , чтобы приостановить выполнение в любой точке. Вы будете переведены в режим разрыва и можете нажать F5 , чтобы продолжить выполнение, или F8 , чтобы выполнить пошаговый код в визуальном отладчике.

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

Вы даже можете редактировать большую часть кода во время его работы.

Используйте Debug.Print для вывода сообщений в Immediate Window в редакторе VBA, что более удобно, чем MsgBox .

Используйте точки останова или ключевое слово Stop , чтобы автоматически остановить выполнение в интересных областях.

Вы можете использовать Debug.Assert для остановить выполнение условно.

CTRL + SCR LK (Scroll Lock) работал у меня.

Иногда правильный набор ключей ( Pause , Break или ScrLk) недоступен на клавиатуре (чаще всего это происходит с пользователями ноутбуков) и нажатие Esc 2, 3 или несколько раз не останавливается макрос тоже.

Я тоже застрял, и в итоге нашел решение в функции доступности Windows, после чего я попробовал все исследованные варианты, и 3 из них работали для меня в 3 разных сценариях.

Шаг # 01. Если ваша клавиатура не имеет определенного ключа, не волнуйтесь и откройте «OnScreen Keyboard» из Windows Utilities, нажав Win + U .

Шаг # 02. Теперь попробуйте любой из нижеперечисленных параметров, и они определенно будут работать в зависимости от вашей системной архитектуры, то есть версии ОС и Office

  • Ctrl + Pause
  • Ctrl + ScrLk
  • Esc + Esc (дважды нажмите последовательно)

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

Как остановить выполнение макроса в excel

Здравствуйте, i-s-v, Вы писали:

ISV>Как програмно завершить работу макроса? Макрос вызываеться при нажатии на настроенную кнопку. и должен останавливаться при закрытии формы. Какая процедура завершает работу макроса?
ISV>

Такой процедуры нет. Однако можно попытаться выкрутиться. Пример:
1. В VBA-проекте новой книги добавить стандартный модуль
2. В добавленный модуль вставить код:

Читать еще:  Как ворд перенести в эксель

3. Добавить в проект форму
4. Добавить обработчик события Terminate этой формы:

5. На какую-нибуть панель инструментов добавить 2 кнопки: на кнопку 1 назначить макрос testMacros, на кнопку 2 — testForm
6. Расположить окна MS Excel и проекта VBA так, чтобы они одновременно были видны целиком на экране. В окне VBA сделать видимым окно отладки (например, нажать Ctrl+G)
7. Нажать на кнопку 1 — в окно отлаки VBA начнут сыпаться значения системного времени
8. Нажать на кнопку 2 — на экране должна появиться форма, дерьмо в окно отладки продолжает сыпаться
9. Закрыть форму — поток дерьма иссякнет.

Суть:
1) при выполнении макроса надо вызывать DoEvents, давая таким образом возможность обрабатываться другим событиям, например, щелчкам мышью на кнопках панели инструментов.
2) в ходе выполнения макроса проверять значение глобальной переменной, разрешающей выполнение, если выполнение запрещено — выходить из цикла(процедуры) макроса
3) воздействовать на глобальную переменную из любой удобной точки — применимо к текущему примеру — при закрытии формы

Корявенько, но для некоторых случаев вполне работоспособно.

Остановка макроса из UserForm[vbModeless]

1. Как раз DoEvents ща смотрю, надежд пока мало (событие Click там не любят или спец. скрывают. )

2. Да, эта наша тяжелая артиллерия. :-).
иногда правда бывает, что через API получается даже изящнее, так что будем дерзать, если что найду, обязательно напишу, потому что вещь я думаю нужная всем кто пишет макросы для общего употребления. Да и просто приятно..

Прикольно. Спасибо за совет — DoEvents — заработал.

Я его понаставлял в разные куски макроса, как раз где у меня FormWait.Repaint обновляется (чтобы значение ProgressBar увеличить и текст того чем он щас занимается обновить).
А работает он следующим образом, когда нажимаешь на кнопку «Прервать», то событие до нее дойдет, как только в макросе повстречает DoEvents. (когда промежуток между соседними DoEvents большой, то получается так — на кнопку жмешь. ничего не происходит, кнопка не шевелится, потом через 5-10 сек раз и полезло то, что на кнопке висело..) Весело вообщем.

А для того, чтобы после нажатие кнопки «Прервать» выполнение макроса прекратить, я лучше ничего не нашел, как сделать это так:

Private Sub ButCancel_Click()
Dim Response
Response = MsgBox(«Вы точно хотите прервать работу макроса?», vbQuestion + vbOKOnly + vbOKCancel, «Внимание!»)
If Response = 1 Then
Unload FormWait
MyModule.blnBreak = True
Else
End If
End Sub

А в макросе, после каждого DoEvents сделать проверку, что-нибудт типа такого:
If blnBreak Then Exit Sub

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

Рад, что получилось средствами Экселя и не пришлось посылать за тяжелой артиллерией. 🙂

Чтобы остановить — попробуй End

Просто я хотел свой код, относящийся к форме, максимально, как это сказать-то . инкапсулировать. Т.е. есть форма (один файл), включил ее в проект, перенес на другой комп, переслал другому человеку, и не надо потом долго объяснять за какие переменные там дергать, за чем следить, че проверять и вызывать.
А делать с этой формой особенного ничего и не надо, показал/скрыл ее, значения на ProgressBar обновил (ну и на подписях).
Для последнего я включил в модуль формы такую функцию:

Читать еще:  Как изменить часть массива в excel

Public Sub ShowFormWait(progValue As Double, textProc As String, TextFile As String)

Прерывание процедур и функций VBA

Иногда встречаются обстоятельства, при которых нет смысла продолжать выполнение процедуры или функции. VBA имеет операторы Exit и End, которые дают возможность либо завершать процедуру или функцию, либо останавливать всю программу.

Оператор Exit

Для того, чтобы процедура или функция прекратила выполнение, используется одна из двух доступных форм VBA-оператора Exit, в зависимости от того, необходимо ли завершить функцию или процедуру:

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

Здесь содержится код проверки того, была ли выбрана пользователем в окне ввода кнопка «Отмена». Если это так — программа выдает сообщение о том, что не был введен возраст, и прекращает выполнение кода оператором Exit Sub.

Оператор Exit Sub приводит к тому, что VBA немедленно прекращает выполнение кода процедуры. После выполнения этого оператора VBA прекращает выполнение текущей процедуры и возвращается к выполнению той процедуры или функции, которая вызвала процедуру, содержащую оператор Exit Sub.

Оператор End

Для полного завершения выполнения программы используется ключевое слово End в отдельной строке:

При выполнении этого оператора VBA прекращает все выполнение операторов процедуры и функции. Любые имеющиеся переменные перестают существовать и их значения теряются.

Т.к. программа полностью прерывается, необходимо перед оператором End выводить пользователю сообщение о том, что будет происходить и почему. В противном случае пользователи вашей процедуры могут не понять, почему процедура или программа, которую они используют, внезапно прекратила работу. Если программа перестанет выполняться вследствие какого-либо действия пользователя, такого как отмена окна ввода, без объяснения, пользователь процедуры может никогда не узнать, почему процедура заканчивается.

Также не следует забывать закрывать рабочие книги или выполнять другие сервисные работы перед выполнением оператора End, чтобы пользователю программы не приходилось доделывать незаконченные операции.

В начало страницы

В начало страницы

Создание, выполнение, изменение и удаление макроса в Office для Mac

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

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

В Word 2016 для Mac можно создать макрос с сочетанием клавиш, запустить макрос и удалить макрос, который больше не нужен.

Читать еще:  Как в excel все листы объединить в один

В меню Вид последовательно выберите пункты Макросы и Записать макрос.

Введите имя макроса или примите имя по умолчанию, предлагаемое Word.

Чтобы использовать этот макрос во всех новых документах, убедитесь в том, что в списке Сохранить макрос в выбран пункт Все документы (Обычный).

Нажмите кнопку Клавиатура, чтобы назначить макросу сочетание клавиш.

В Word откроется диалоговое окно Настройка клавиатуры.

Введите сочетание клавиш в поле Нажмите новое сочетание клавиш.

При нажатии сочетания клавиш в Word отображается команда или действие, назначенные в данный момент этому сочетанию, если таковые имеются.

Если выбранное сочетание клавиш уже назначено, удалите его в поле Нажмите новое сочетание клавиш и выберите другое сочетание.

Найдя свободное сочетание клавиш, переходите к следующему шагу.

Чтобы использовать это сочетание клавиш во всех новых документах, убедитесь в том, что в поле Сохранить изменения в выбран глобальный шаблон Normal.dotm.

Нажмите кнопку Назначить.

Когда вы будете готовы к записи макроса, нажмите кнопку ОК.

Последовательно выберите нужные команды или нажмите нужные клавиши.

Word записывает щелчки мышью и нажатия клавиш, но не выделение текста мышью. Чтобы выделить текст при записи макроса, используйте клавиатуру.

Чтобы остановить запись, в меню Вид последовательно выберите пункты Макросы и Остановить запись.

Запустить макрос можно с помощью назначенного ему сочетания клавиш или из списка Макросы.

В меню Вид последовательно выберите пункты Макросы и Просмотр макросов.

В списке Имя макроса выберите макрос, который хотите запустить.

Нажмите кнопку Запустить.

В меню Вид последовательно выберите пункты Макросы и Просмотр макросов.

Убедитесь в том, что в списке Макросы в указано расположение макроса, который вы хотите удалить.

В списке содержится имя документа, открытого в текущем окне, а также глобальный шаблон и команды Word.

В поле Имя макроса выберите макрос, который нужно удалить, а затем щелкните значок минуса под списком.

Когда в Word появится подтверждение на удаление макроса, нажмите кнопку Да.

В Excel 2016 для Mac можно создать макрос с сочетанием клавиш, запустить макрос и удалить макрос, который больше не нужен.

При записи макроса все необходимые действия записываются средством записи макроса. Такими действиями может быть ввод текста или чисел, выбор ячеек или команд на ленте или в меню, форматирование, выделение ячеек, строк или столбцов, а также выделение ячеек путем перетаскивания указателя мыши.

Примечание: Команды для записи, создания и удаления макросов, а также другие дополнительные функции также доступны на вкладке » разработчик » на ленте. Дополнительные сведения об использовании вкладки «Разработчик» можно найти в разделе Использование вкладки «Разработчик» для создания и удаления макроса в Excel 2016 для Mac.

Выберите Сервис _гт_ макрос _гт_ запись New.

В поле Имя макроса укажите имя макроса.

Чтобы создать сочетание клавиш для макроса, введите букву в поле Option + cmd .

Выберите расположение макроса в раскрывающемся списке.

Ссылка на основную публикацию