Remkomplekty.ru

IT Новости из мира ПК
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как остановить макрос vba excel

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

9 ответов

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

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

Как остановить макрос VBA без уничтожения объектов

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

Но этот подход приводит меня к другой проблеме — когда End выполняется, он уничтожает все мои объекты, включая поток ошибок. Поэтому, когда пользователь делает что-то новое и сталкивается с фатальной ошибкой, он получает ошибку времени выполнения VBA (91: Object . не задано), потому что код записывается в поток файлов, который теперь имеет значение Nothing.

Есть ли лучший способ закончить макрос (и, таким образом, избежать неожиданного поведения после ошибки), не теряя все мои объекты? Официальная документация VBA не помогает. Заранее спасибо.

4 Ответов

Конец:

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

ThisWorkbook модуль:

Стандартный модуль:

Когда ‘First’ метод выполняется сначала с ‘End’ в нем, а затем ‘Second’ метод, то errorStream не будет ничего. Instaead of ‘End’ use ‘ExitSub’, то переменная не будет сброшена.

Или вы можете сделать переменную error-stream закрытой в модуле класса Thisworkbook и добавить свойство, которое создаст поток, если переменная не является ничем. HTH

ThisWorkbook модуль:

Стандартный модуль:

Может быть, попробовать Exit вместо End ?

Если вы пытаетесь выйти из функции

Я не уверен, как ваши объекты объявляются и обрабатываются на каких модулях так. если вы можете опубликовать код, это может сильно помочь.

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

Как вы можете видеть, обработка ошибок в test1 переопределяет обработку в основной программе, поэтому ошибка не возникает. Во втором Sub, test2 , нет обработки ошибок, поэтому информация передается до предыдущей программы для обработки (и она передаст ее по цепочке, если эта программа была вызвана чем-то другим), и ошибка может быть чисто обработана вашей основной подпрограммой, чтобы закрыть все аккуратно.

Объявляйте переменные на уровне модуля, а не в функции. В VBA, вы видите различные листы на навигации проекта слева по умолчанию. Под листами находится папка с именем «Modules»: если вы не видите «Module1″ или вариант в качестве дочернего элемента этой папки, щелкните правой кнопкой мыши папку и выберите » InsertModule.»
Они должны быть постоянными для вас.

Похожие вопросы:

Я работаю над проектом по отправке оповещений в список рассылки. У меня есть файл excel с макросом vba, который позволяет обновлять его из базы данных. Мне нужно выполнять макрос в файле.

Я знаю, что вы можете вручную остановить запущенный макрос VBA с помощью Ctrl + Break , но есть ли какой-либо способ остановить код автоматически, если выполняется определенное условие? exit.

Это не фактический код, над которым я работаю. но этот код может быть использован, чтобы объяснить мою проблему в ясном виде. У меня есть функция под названием OnCallFunction с некоторыми новыми.

Читать еще:  Функция find vba excel

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

Можно ли написать приложение WPF C#, которое может загружать и читать макрос VBA из отдельного текстового файла, открывать существующую книгу Excel и обрабатывать макрос VBA против него? Я NOT.

Excel 2002 VBA. У меня есть макрос, который запускает внешний скрипт всякий раз, когда выполняется определенное условие: Shell(c:programscript.exe) Как остановить эту запущенную программу, если.

Я использую довольно простой VBA в Word: Sub Something On Error GoTo prob Dim d As Document Set d = Documents.Open(FileName:=c:ajb filestest.docx) ‘this should run if macro succeeds MsgBox ok Exit.

У меня есть длинный конвейер python, который генерирует pandas dataframe. Короче говоря, я хочу: Отображение pandas dataframe в excel Добавить & запустить VBA макрос Удалите макрос VBA и.

Я пишу большой макрос для MS Word 2013, и одна из его частей должна быть sub, которая запрещает Пользователю писать текст; пользователь должен иметь возможность использовать горячую клавишу.

Я пытаюсь запустить макрос, когда я дважды нажимаю на Visio фигур. Я хочу передать объект shape в макрос VBA, чтобы я мог что-то сделать в макросе в зависимости от идентификатора объекта Shape.

Как остановить макрос vba excel

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

Допустим, мы, постоянно, в рабочей книге копируем данные из одного диапазона ячеек в другой, и в какой-то момент нам надоело это делать. Как заставить MS Excel делать это за нас? Очень просто.

Открываем наш файл, в котором мы хотим автоматизировать операцию, во вкладке меню «Вид» нажимаем кнопку «Макросы» и из выпавшего списка выбираем команду «Записать макрос»

Должно будет выскочить диалоговое окно записи макроса, в котором мы можем изменить его параметры и нажать «ОК».

После этого начинаем записывать наш макросов, путем простого выполнения тех действий, которые мы хотим автоматизировать, допустим, мы хотим скопировать данные из диапазона ячеек E2:E6 в диапазон G2:G6. Выделяем диапазон E2:E6, нажимаем Ctrl+C или нажимаем правую клавишу мышки и выбираем пункт «Копировать»:

Встаем в ячейку G2, нажимаем правую клавишу мышки и выбираем пункт «Специальная вставка» или нажимаем сочетание клавиш Ctrl+Alt+V:

В открывшейся форме выбираем «Значения и форматы чисел» и нажимаем «ОК»:

После этого, во вкладке меню «Вид» нажимаем кнопку «Макросы» и из выпавшего списка выбираем команду «Остановить запись»

Для того чтобы наш записанный макрос сохранился в нашей рабочей книге, нам необходимо сохранить файл как «Книга Excel с поддержкой макросов (*.xlsm)»

Выделяем диапазон G2:G6 и удаляем вставленные нами данные.

Теперь, для того чтобы повторить операцию, во вкладке меню «Вид» нажимаем кнопку «Макросы» и из выпавшего списка выбираем команду «Макросы»

В открывшемся диалоговом окне выбираем наш макрос и нажимаем кнопку «Выполнить»

Макрос выполнит точную последовательность наших действий, скопирует данный из диапазона E2:E6 и вставит их в диапазон G2:G6, как значения.

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

VBA Excel. Макросы (запись, запуск, пример)

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

Вкладка «Разработчик»

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

Excel 2010-2016

Переходим по пути: Файл — Параметры — Настроить ленту. В разделе «Настроить ленту» справа в списке «Основные вкладки» устанавливаем флажок «Разработчик» и нажимаем кнопку «OK».

Excel 2007

Переходим по пути: значок «Microsoft Office» — Параметры Excel — категория «Основные», в категории «Основные» устанавливаем флажок «Показывать вкладку «Разработчик» на ленте» и нажимаем кнопку «OK».

Excel 2000-2003

Здесь ничего отображать не надо: кнопки по работе с макросами и редактором VBA находятся в главном меню на вкладке «Сервис» — «Макрос».

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

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

Excel 2007-2016

На ленте во вкладке «Разработчик» нажмите кнопку «Запись макроса».

Excel 2000-2003

Пройдите по пунктам меню «Сервис» — «Макрос» — «Начать запись».

Окно «Запись макроса»

Имя макроса: можно изменить или оставить по умолчанию («Макрос» с очередным номером). Если у вас уже есть макрос с таким именем, он будет записан в новый программный модуль, который будет создан автоматически.

Сочетание клавиш: добавьте букву, если хотите запускать макрос сочетанием клавиш Ctrl+«буква». В какой раскладке вы впишите букву (например, «й» или «q»), в той и будет запускаться макрос. Если буква будет вписана в верхнем регистре («Й» или «Q»), используйте для запускa макроса сочетание клавиш Ctrl+Shift+«буква».

Сохранить в: выберите книгу, в которой должен быть сохранен макрос:

  • «Эта книга» — макрос будет записан в книге, из которой рекордер был запущен (нажата кнопка «Запись макроса»).
  • «Новая книга» — откроется новая книга и макрос будет записан в ней.
  • «Личная книга макросов» — макрос запишется в Личную книгу макросов и будет доступен из всех открытых книг Excel.

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

Читать еще:  Как сложить строки в excel

Заполнив окно, нажимаем кнопку «OK», кнопка «Запись макроса» меняет свое название на «Остановить запись», и можно приступать, собственно, к записи макроса. Выполните на рабочем листе операции, последовательность которых вы хотите автоматизировать и, после их завершения, нажмите кнопку «Остановить запись». Макрос будет записан и появится в списке макросов.

Список макросов

Окно со списком макросов открывается во всех версиях Excel нажатием кнопки «Макросы». Выглядит оно следующим образом:

Список макросов во всех открытых книгах

  • Выполнить — выделенный макрос будет запущен на выполнение.
  • Войти — переход к коду макроса, запущенному и поставленному на паузу, как при обнаружении ошибки в коде.
  • Изменить — переход к коду макроса для редактирования.
  • Создать — кнопка станет активной при записи имени нового макроса в поле «Имя макроса».
  • Удалить — удаление выделенного макроса.
  • Параметры… — редактирование сочетания клавиш для запуска макроса и его описания.
  • Находится в: — здесь можно выбрать все открытые книги или одну из них.
  • Описание — текст, добавленный в одноименное поле при создании макроса или редактировании его параметров.

Запуск макроса

Запустить записанный макрос можно следующими способами:

  • Сочетанием клавиш, указанным в параметрах макроса.
  • Кнопкой «Выполнить» из окна списка макросов.
  • Кнопкой «Run Sub» или клавишей «F5» из редактора VBA.
  • Кнопкой, добавленной на лист Excel из раздела «Элементы управления формы» и которой назначен запускаемый макрос.

Кроме этого макрос можно назначить изображению, добавить кнопку запуска на панель быстрого доступа и в меню (на ленту).

Пример записи простого макроса

Выполните следующие действия:

Excel 2007-2016

  1. Откройте книгу Excel или создайте новую и сохраните ее как книгу с поддержкой макросов (.xlsm).
  2. На вкладке «Разработчик» нажмите кнопку «Запись макроса».
  3. В окне «Запись макроса» нажмите кнопку «OK», оставив параметры по умолчанию.
  4. Перейдите на вкладку «Главная» и выберите любой цвет заливки ячеек.
  5. Нажмите кнопку «Остановить запись».

Excel 2000-2003

  1. Откройте книгу Excel или создайте новую и сохраните ее с расширением по умолчанию (.xls).
  2. Включите запись макроса, пройдя по пунктам меню «Сервис» — «Макрос» — «Начать запись».
  3. В окне «Запись макроса» нажмите кнопку «OK», оставив параметры по умолчанию.
  4. На панели инструментов выберите любой цвет заливки ячеек.
  5. Нажмите кнопку «Остановить запись».

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

Откройте список макросов, выберите записанный макрос и нажмите кнопку «Изменить». Вы увидите код вашего макроса:

Число (5296274) в вашем примере будет другим, в зависимости от выбранного цвета заливки.

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

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

Скопируйте этот код и вставьте его внизу, под вашим макросом, в редакторе VBA (числовое значение цвета можете изменить на свое или оставить, как в примере). Проверьте его работоспособность, выбрав незакрашенные ячейки и запустив макрос клавишей «F5», не забыв о том, что курсор должен находиться внутри этого макроса.

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

Назначение макроса кнопке

Теперь давайте назначим записанный макрос (любой из двух) кнопке, добавленной на лист Excel из раздела «Элементы управления формы»:

Excel 2007-2016

  1. На вкладке «Разработчик» нажмите кнопку «Вставить» и в разделе «Элементы управления формы» кликните по изображению кнопки.
  2. Переведите курсор на табличную область листа, курсор примет вид крестика, и кликните левой кнопкой мыши.
  3. В открывшемся окне «Назначить макрос объекту» выберите один из новых макросов и нажмите кнопку «OK». Если нажать кнопку «Отмена», новая кнопка будет создана без назначенного макроса. Его можно будет назначить позднее, кликнув по ней правой кнопкой мыши и выбрав в контекстном меню «Назначить макрос…»

Excel 2000-2003

    1. Отобразите панель инструментов «Формы», пройдя по пунктам меню «Вид» — «Панели инструментов» — «Формы».
    2. Кликните по Кнопке на панели инструментов «Формы», затем переведите курсор на табличную часть рабочего листа, нажмите левую кнопку мыши и, не отпуская ее, нарисуйте прямоугольник (контур кнопки) нужного размера, затем отпустите кнопку мыши.
    3. В открывшемся окне «Назначить макрос объекту» выберите один из новых макросов и нажмите кнопку «OK». Если нажать кнопку «Отмена», новая кнопка будет создана без назначенного макроса. Его можно будет назначить позднее, кликнув по ней правой кнопкой мыши и выбрав в контекстном меню «Назначить макрос…»

Кнопка создана. Выберите ячейку или диапазон и нажмите созданную кнопку. Цвет фона изменится.

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

Сокращенный вариант кода по очистке фона будет выглядеть так:

1.3 Применение макрорекордера

Макрорекордер в Word и Excel: запуск, приемы работы, возможности

В большинство программ Microsoft Office, таких, как Excel, Word, PowerPoint и т.п., встроено замечательное средство, которое позволит вам создавать программы, вообще ничего не зная о программировании. Это средство называется макрорекордером.

Макрорекордер, как понятно из его названия — средство для записи макросов. Макрос — всего лишь еще одно название для VBA-программы, а макрорекордер — средство для его автоматического создания.

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

Конечно, макрорекордер позволяет написать только самые простые VBA-программы. Однако и он может принести много пользы. Например, можно «положить» на горячие клавиши те слова, словосочетания, варианты оформления и т.п., которые вам часто приходится вводить (должность, название фирмы, продукт, ФИО директора и ответственного исполнителя и т.п.) — этим вы сэкономите много времени.

Читать еще:  Com excel application

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

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

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

посмотрите, нет ли готовой команды, которую можно сразу назначить клавише или кнопке в панели инструментов без изготовления макроса. Посмотреть можно при помощи меню Сервис -> Настройка. На вкладке Команды можно перетащить нужную команду на требуемую панель управления, а нажав на этой же вкладке кнопку Клавиатура — назначить для команды нужную комбинацию клавиш;

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

Как создать макрос в макрорекордере (для тех программ Microsoft Office, для которых такое средство предусмотрено, например, Word, Excel, PowerPoint, Project):

Внимание! Приложения Microsoft Office 2003 по умолчанию настроены так, что не позволяют запускать макросы. Поэтому перед тем, как приступать к созданию макросов, в меню Сервис -> Макрос -> Безопасность переставьте переключатель в положение «Средняя» или «Низкая», а потом закройте и снова откройте данное приложение. Это потребуется сделать только один раз.

В меню Сервис->Макрос выберите команду Начать запись. В открывшемся окне вам потребуется определить:

Имя макроса. Правила такие: не должно начинаться с цифры, не должно быть пробелов и символов пунктуации. Максимальная длина в Excel — 64 символа, в Word — 80 символов. Можно писать по-русски.

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

Где сохранить макрос. В Word в вашем распоряжении текущий файл и шаблон для всех вновь создаваемых документов — normal.dot. В Excel в вашем распоряжении текущая книга, возможность создать макрос одновременно с созданием новой книги и личная книга макросов personal. xls (макросы из этой скрытой книги будут доступны в любых книгах). Подробнее про то, где может храниться программный код, мы поговорим в разделе про структуру проектов VBA.

Описание. Лучше заполнить — это подарок не только для других, но и для себя (через несколько месяцев).

После нажатия на кнопку OK или назначения кнопки/клавиатурной комбинации начнется запись макроса. Указатель мыши при этом примет вид магнитофонной кассеты и появится маленькая панель Остановить запись. На ней всего две кнопки — Остановить запись и Пауза. Если вы случайно закрыли эту панель, остановить запись можно через меню Сервис->Макрос->Остановить запись.

Самый простой способ запустить макрос, которому не назначена кнопка или клавиатурная комбинация — в меню Сервис выбрать Макрос -> Макросы (или нажать кнопку + ), в списке выбрать нужный макрос и нажать на кнопку Выполнить. Из этого же окна можно просматривать/редактировать макросы, удалять/перемещать их и т.п.

Если макросов создано много, то получить список всех назначений клавиш (включая назначения для встроенных макросов Word) можно при помощи меню Сервис -> Макрос -> Макросы, затем в списке Макросы из выбрать команды Word и выбрать в списке Имя команду List Commands. В ответ на приглашение нужно выбрать Текущие настройки меню и клавиш (иначе будет выведен полный список команд Word на 26 страниц). В ваш документ будет вставлена таблица с текущими назначениями клавиш, которую можно распечатать.

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

если в вашем макросе повторяются какие-либо действия, возможно, есть смысл организовать цикл;

может быть, есть смысл в ходе выполнения уточнить что-либо у пользователя (при помощи Input Box или элементов управления);

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

Как все это сделать — будет рассказано в следующих главах.

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

Конкретный пример: вам нужно автоматизировать создание диаграмм в Excel. Поскольку в русской версии Excel для создания диаграммы вручную вы используете команду Вставка -> Диаграмма, то скорее всего, в справке по VBA вы начнете в первую очередь искать объект Diagram. И вы его найдете — и скорее всего, потратите определенное время на его изучение, прежде чем поймете, что это не та диаграмма! Объект Diagram представляет то, что в русской версии Excel называется «Схематическая диаграмма» (доступны из того же меню Вставка), а обычная диаграмма — это объект Chart. А вот если бы мы пустили вперед разведчика (то есть создали бы диаграмму с записью в макрорекордере и посмотрели бы созданный код), он бы сразу указал нам нужное направление движения.

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