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

Останов выполнения кода Stop code execution

Выполнение кода может остановиться по одной из следующих причин. As you run your code, it may stop executing for one of the following reasons:

Происходит неперехваченная ошибка во время выполнения. An untrapped run-time error occurs.

Происходит перехваченная ошибка во время выполнения и выбран элемент Останов при любой ошибке на вкладке Общие диалогового окна Параметры. A trapped run-time error occurs, and Break on All Errors is selected on the General tab of the Options dialog box.

Обнаружена точка останова. A breakpoint is encountered.

В коде обнаружен оператор Stop, выполняющий переключение в режим приостановки выполнения. A Stop statement in your code is encountered, switching the mode to break mode.

В коде обнаружен оператор End, выполняющий переключение в режим разработки. An End statement in your code is encountered, switching the mode to design time.

Вы останавливаете выполнение вручную в данной точке. You halt execution manually at a given point.

Обнаружено контрольное выражение, которое вызывает останов при выполнении определенных условий. A watch expression that you set to break if its value changes or becomes true is encountered.

Остановка выполнения вручную To halt execution manually

Чтобы переключиться в режим приостановки выполнения, в меню Выполнить выберите команду Останов (CTRL+BREAK) или используйте ярлык на панели инструментов: . To switch to break mode, from the Run menu, choose Break (CTRL+BREAK), or use the toolbar shortcut: .

Чтобы переключиться в режим разработки, в меню Выполнить выберите команду Сбросить или используйте ярлык на панели инструментов: . To switch to design time, from the Run menu, choose Reset

, or use the toolbar shortcut: .

Продолжение выполнения после остановки приложения To continue execution when your application has halted

  • В меню Отладка выберите команду Выполнить пошагово (F8), Шаг с обходом (SHIFT+F8), Шаг с выходом (CTRL+SHIFT+F8) или Выполнить до текущей позиции (CTRL+F8). From the Debug menu, choose Step Into (F8), Step Over (SHIFT+F8), Step Out (CTRL+SHIFT+F8), or Run To Cursor (CTRL+F8).

См. также See also

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник: docs.microsoft.com

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

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

Оператор Exit

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

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

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

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

Оператор End

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

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

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

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

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

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

Источник: on-line-teaching.com

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

9 ответов

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

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

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

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

Читайте также:  Excel vba макрос

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

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 обновил (ну и на подписях).
Для последнего я включил в модуль формы такую функцию:

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

Источник: forum.codenet.ru

Как создавать, изменять и выполнять макросы в Excel

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

Создание макросов

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

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

Метод 1: Записываем макрос в автоматическом режиме

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

Узнать, как это можно сделать, можно в нашей статье – “Как включать и отключать макросы в Excel”.

После того, как макросы включены, можно перейти к нашей основной задаче.

  1. Переключаемся во вкладку “Разработчик”. В группе инструментов “Код” щелкаем по значку “Записать макрос”.
  2. На экране появится окошко, в котором мы можем выполнить настройки записи. Здесь указывается:
    • имя макроса – любое, но должно начинаться с буквы (не с цифры), не допускаются пробелы.
    • комбинация клавиш, которая будет использоваться для запуска макроса. Обязательной является Ctrl, а вторую мы можем назначить в специальном поле. Допустим, пусть это будет клавиша “r”. Если нужно использовать заглавную букву, нужно зажать клавишу Shift, которая будет добавлена в сочетание клавиш.
    • место хранения макроса. Стандартно – это будет текущая книга, но, если требуется, можно выбрать новую книгу или личную книгу макросов. В нашем случае оставляем стандартный вариант.
    • При желании можно добавить описание к макросу.
    • По готовности кликаем OK.
  3. Теперь в созданный макрос будут записываться все действия, которые мы будем выполнить в книге. И так до тех пор, пока мы не остановим запись.
  4. Допустим, давайте давайте в ячейке D2 выполним умножение двух ячеек (B2 и B3): =B2*B3 .
  5. После того, как выражение готово, нажимаем клавишу Enter, чтобы получить результат. Затем останавливаем запись макроса, нажав на значок “Стоп” (появилась вместо кнопки “Записать макрос”) в группе инструментов “Код”.

Запускаем выполнение макроса

Чтобы проверить работу записанного макроса, нужно сделать следующее:

  1. В той же вкладке (“Разработчик”) и группе “Код” нажимаем кнопку “Макросы” (также можно воспользоваться горячими клавишами Alt+F8).
  2. В отобразившемся окошке выбираем наш макрос и жмем по команде “Выполнить”.Примечание: Есть более простой вариант запустить выполнение макроса – воспользоваться сочетанием клавиш, которое мы задали при создании макроса.
  3. Результатом проверки будет повторение ранее выполненных (записанных) действий.

Корректируем макрос

Созданный макрос можно изменить. Самая распространенная причина, которая приводит к такой необходимости – сделанные при записи ошибки. Вот как можно отредактировать макрос:

  1. Нажимаем кнопку “Макросы” (или комбинацию Ctrl+F8).
  2. В появившемся окошке выбираем наш макрос и щелкаем “Изменить”.
  3. На экране отобразится окно редактора “Microsoft Visual Basic”, в котором мы можем внести правки. Структура каждого макроса следующая:
    • открывается с команды “Sub”, закрывается – “End Sub”;
    • после “Sub” отображается имя макроса;
    • далее указано описание (если оно есть) и назначенная комбинация клавиш;
    • команда “Range(“…”).Select” возвращает номер ячейки. К примеру, “Range(“B2″).Select” отбирает ячейку B2.
    • В строке “ActiveCell.FormulaR1C1” указывается значение ячейки или действие в формуле.
  4. Давайте попробуем скорректировать макрос, а именно, добавить в него ячейку B4 со значением 3. В код макроса нужно добавить следующие строки:
    Range(“B4”).Select
    ActiveCell.FormulaR1C1 = “3”
  5. Для результирующей ячейки D2, соответственно, тоже нужно изменить начальное выражение на следующее:
    ActiveCell.FormulaR1C1 = “=RC[-2]*R[1]C[-2]*R[2]C[-2]” .Примечание: Обратите внимание, что адреса ячеек в данной строке (ActiveCell.FormulaR1C1) пишутся в стиле R1C1.
  6. Когда все готово, редактор можно закрывать (просто щелкаем на крестик в правом верхнем углу окна).
  7. Запускаем выполнение измененного макроса, после чего можем заметить, что в таблице появилась новая заполненная ячейка (B4 со значением “3”), а также, пересчитан результат с учетом измененной формулы.
  8. Если мы имеем дело с большим макросом, на выполнение которого может потребоваться немало времени, ручное редактирование изменений поможет быстрее справиться с задачей.
    • Добавив в конце команду Application.ScreenUpdating = False мы можем ускорить работу, так как во время выполнения макроса, изменения на экране отображаться не будут.
    • Если потребуется снова вернуть отображение на экране, пишем команду: Application.ScreenUpdating = True .
  9. Чтобы не нагружать программу пересчетом после каждого внесенного изменения, в самом начале пишем команду Application.Calculation = xlCalculationManual , а в конце – Application.Calculation = xlCalculationAutomatic . Теперь вычисление будет выполняться только один раз.
Читайте также:  Макросы для excel

Метод 2: создание макроса вручную

Опытные пользователи Эксель в некоторых случаях предпочитают создавать макросы от начала до конца полностью вручную . План действий следующий:

  1. Во вкладке “Разработчик” нажимаем на значком “Visual Basic” (группа инструментов “Код”).
  2. В результате, на экране появится уже знакомое окно, которое мы рассмотрели выше.
  3. Здесь создается макрос и пишется ее код – полностью вручную.

Заключение

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

Источник: microexcel.ru

Макросы в Excel

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

Приложение Excel умеет записывать все действия пользователя с помощью макрорекодера, создавая специальную программу на языке программирования Visual Basic for Application (VBA), которую в последующем можно запустить для исполнения. При этом Вам не нужно быть программистом или иметь специальное образование.

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

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

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

Подготовка к созданию макроса

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

В качестве примера создадим простой макрос, задающей ячейке наш стиль. Определим какие шаги надо выполнить:

  • Установить шрифт;
  • Задать заливку;
  • Задать границы.

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

Запись макроса

Теперь произведем саму запись. Выделите любую ячейку, которой необходимо задать стиль (это может быть любая ячейка, главное не меняйте ее во время записи). Перейдите на вкладку «Вид», найдите область «Макросы». Раскройте меню, кликнув по стрелочке, и выберите пункт «Запись макроса». Не обращайте внимание на появившееся окно, его параметры будут рассмотрены дальше, просто нажмите кнопку «OK».

Установите границы, цвет заливки, курсивное начертание текста и шрифт Times New Roman. Остановите запись, используя то же меню. Сейчас там должен находиться пункт «Остановить запись», – выберите его.

Запуск макроса и назначение горячих клавиш

После остановки макрорекодера, протестируйте работу нового макроса. Для этого кликнете по пиктограмме «Макросы» на ленте вкладки «Вид». Должно появиться следующее окно со списком все макросов открытых книг:

Нажмите кнопку «Выполнить». Выделенный диапазон должен поменять свое оформление на то, которое Вы определили во время записи.
Если запускать процедуру придется часто, то есть смысл назначить ей горячие клавиши. Кликните кнопку «Параметры» в том же окне. На экране появиться такой диалог:

  • Имя макроса – его поменять здесь нельзя. Это возможно сделать только в коде записанной процедуры.
  • Сочетание клавиш – укажите один символ того языка, в раскладке которого чаще приходиться работать, так как, например, сочетания Ctrl + q и Ctrl + й являются разными, но находятся на одной клавише. Так же имеет значение регистр символа. Если указать символ «Й», то горячими клавишами будет служить сочетание Ctrl + Shift + й.
  • Описание – служит памяткой тому, кто записал макрос, и пояснением остальным.
Читайте также:  Работа с макросами в excel

Все выше указанные параметры можно задать при запуске макрорекодера.

Изменение макроса

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

Отобразите окно с макросами, выберите любой из имеющихся и нажмите кнопку «Изменить». Программа Вас перенаправит в редактор Visual Basic в модуль с кодом выбранного макроса. Если Вы точно следовали статье, то на экране должен быть приблизительно следующий скрипт (зеленый текст, расположенный после апострофа, является комментарием и не выполняется программой):

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

Дополните Ваш код в соответствии с нижеприведенным образцом:

Запустите макрос и убедитесь, что внизу страницы появилось наше сообщение:

Сохраняя книгу с макросами, необходимо выбрать расширение файла .xlsm, иначе все процедуры сотрутся.

Источник: office-menu.ru

Канал в Telegram

Вы здесь

Автозапуск макроса при открытии или закрытии книги Excel

Как запустить макрос при открытии или закрытии книги Excel?

Иногда требуется выполнить некоторые действия или расчеты при запуске рабочей книги в Excel. В этой статье рассмотрим на примере простого запроса пароля как реализуется автозапуск макроса в Excel.
Хочу сразу отметить, запуск макроса произойдет только в случае если в настройках безопасности (Сервис – Макрос – Безопасность) выбран низкий или средний уровень безопасности. При среднем уровне пользователь должен не отключать макросы при запросе.

Итак, Excel запущен, книга создана, VBE открыт (Alt+F11).

В окне Project Explorer (Ctrl+R) находим нашу книгу

в моем случае это Книга2. Разворачиваем группу объектов “Microsoft Excel Objects” и находим объект “ЭтаКнига

кликаем по нему два раза. Перед нами откроется редактор кода объекта “ЭтаКнига“.
Вы можете переименовать название объекта, выделив его и в окне Properties (F4) изменить свойство (Name).

Теперь создадим форму в нашей книге (как это сделать читаем здесь). На форму добавим две кнопки (CommandButton) и TextBox. Примерный вид следующий:

Эта форма будет появляться при открытии книги, в которую пользователю необходимо ввести пароль.
Ввод пароля всегда скрывается звездочками, точками и т.д. Сделаем и мы тоже самое. Для этого выделите TextBox и в его свойствах (окно Properties) найдите пункт PasswordChar. В его значение вы можете поставить любой символ, эти символы будут отображаться при вводе. Не будем отступать от традиций, поставим знак “звездочки”

Код для кнопки “Продолжить” следующий:

Private Sub CommandButton1_Click()
If TextBox1.Text = “123” Then UserForm1.Hide _
Else MsgBox “Вы ввели неверный пароль! Попробуйте еще раз.”
End Sub

Пароль у нас “123”, если введен верный пароль, то скрываем форму и продолжаем работать с книгой.

Код для кнопки “Отмена”

Private Sub CommandButton2_Click()
ThisWorkbook.Close False
End Sub

ThisWorkbook – ключевое слово. Дословно “Эта рабочая книга” или “Текущая рабочая книга”
Close – команда на закрытие нашей книги. Параметр False указывает на закрытие книги без сохранения.
Параметр false является необязательным. Если этот параметр не указать, то в случае внесения изменений в книгу отобразится диалог:

Все. Форму запрограммировали. Осталось ее автоматически запустить. Для этого перейдем в открытый ранее редактор объекта “ЭтаКнига” и добавим туда следующую процедуру:

Private Sub Workbook_Open()
UserForm1.Show
End Sub

Workbook_Open – событие, происходящее при открытии рабочей книги. Собственно в этой процедуре и открывается наша форма (UserForm1.Show), происходит запуск макроса, или выполняется любой другой код. Процедура Workbook_Open сработает только в объекте “ЭтаКнига”.
Сохраните книгу, закройте и попробуйте ее открыть.

Как выполнить макрос при закрытии книги Excel?

Событие, вызываемое при закрытии книги, так же как и открытие, относится к объекту “ЭтаКнига” (workbook). Открываем редактор кода этого объекта. Теперь выберите в выпадающем списке объект “Workbook” затем в списке доступных событий выберите BeforeClose – событие, вызываемое перед закрытием книги:

Событий объекта книги полно: событие при создании листа, событие при активации книги и т.д.
Итак, после выбора BeforeClose будет создана процедура:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Добавьте в эту процедуру например, строчку вызова сообщения:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox “Ой! Меня закрывают!”
End Sub

Событие BeforeClose имеет параметр Cancel логического типа, который по умолчанию имеет значение False. Если в этот параметр передать значение True, то книгу невозможно будет закрыть:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox “Меня закрыть невозможно!”
Cancel = True
End Sub

На этом все. Рабочий вариант, рассмотренный в данной статье, прикреплен ниже. В последующих статьях еще не однократно будет затронут объект WorkBook и его события, ну а пока – пока!

Источник: www.programm-school.ru