Меню

Vba как отключить сообщения об ошибках

When you’re editing a Microsoft Office VBA macro or function, you will often move your cursor from a line that you haven’t finished. For example, to go copy something you want to paste into that line. But, if that partial line isn’t syntactically valid, the VBA editor interrupts your work by popping up a «Compile error» message that has to be dismissed.

Is there any way to disable the message box? I find it irritating…

(This happens with Excel Visual Basic for Applications, Outlook VBA, Word VBA, etc.)

Jon Freed's user avatar

asked Jul 19, 2012 at 12:29

Iain S's user avatar

1

Do the following in your VBA editor window (entitled «Microsoft Visual Basic for Applications»):

Click the menu «Tools» and then «Options«.

In the Options’ «Editor» tab, uncheck the «Auto Syntax Check» box. (See screenshot, below.)

This change does not make the editor stop compiling in the background and marking syntax errors in red (or whatever formatting is specified in the Options tab «Editor Format»).

MS Office programs share this common VBA editor, so if you change an option while editing VBA for Excel then you’ve changed it for Outlook, Word, etc.

MS VBA editor's Tools Options dialog box

Jon Freed's user avatar

answered Jul 19, 2012 at 13:29

ray's user avatar

rayray

8,4337 gold badges44 silver badges58 bronze badges

8

In the VBE, Tools — Options — Editor and uncheck Auto Syntax Check. It will turn bad code red, but won’t give you the popup.

answered Jul 19, 2012 at 13:30

Dick Kusleika's user avatar

Dick KusleikaDick Kusleika

32.4k4 gold badges51 silver badges72 bronze badges

Dragokas


  • #1

Syntax

Для тех, кого раздражает ситуация, когда нужно скопировать название функции или переменной с другой строки, но как только мы покидаем строку, в которой набираем код, редактор VB6 тут же выбрасывает мессагу — предупреждение об ошибке.
Лично меня это раздражает жутко. Это же надо отвлекаться от работы, нажимать кнопку чтобы закрыть совершенно ненужное окно. В описанной ситуации и так понятно, что строка не завершена, а значит ошибочна. Но у нас то ситуация под контролем!
Отключить сообщения об ошибке редактора Visual Basic не сложно, нужно выбрать пункт Options меню Tools и в появившемся диалоговом окне убрать флажок Auto Syntax Check. У кого русифицировано меню то соответственно Инструменты -> Опции и убрать флажок Авто Проверка Синтаксиса.
Что мы теряем? Назойливую подсказку, которая чаще всего не нужна. Что получаем? Возможность работать не отвлекаясь на лишние мессаги. Кстати, проверка синтаксиса НЕ ОТКЛЮЧАЕТСЯ! Ошибка в строке по прежнему будет подсвечена красным. Т.о. пропустить настоящую ошибку после отключения довольно сложно ( ну если уж вы совсем не отличаете черный и красный цвет!).
И да, всё вышесказанное справедливо и для редактора VBA ( Access там у вас или Excel)

Удачного всем программирования!

Заметку написал: Pro_grammer

Хитрости »

2 Декабрь 2011              57152 просмотров


Как запретить сообщения?

Статья может показаться странной, но…Спрос на данную тему достаточно велик. Тем, кто программирует на VBA приходится делать разнообразные вещи, для выполнения которых используются вызовы стандартных Excel-вских команд и методов. Команды в свою очередь могут выдавать сообщения, которые совершенно не нужны при выполнении кода. Яркий пример — удаление листа из книги. При попытке удаления листа появляется запрос:

Такое предупреждение не может быть лишним с точки зрения ручного удаления листа — вдруг кнопка Удалить была нажата по ошибке. Но при выполнении кода подобные сообщения «стопорят» код и могут стать очень ощутимой помехой автоматизации процессов. К примеру ниже приведен код удаления листа:

Sub Del_Sheet()
    ActiveSheet.Delete
    MsgBox "Лист удален(или нет, смотря что Вы нажали)", vbInformation, "www.excel-vba.ru"
End Sub

Запустите его и увидите, что приходится нажимать «Да» в стандартном окне Excel, чтобы код продолжился и показал уже наше сообщение. Т.е. сначала пользователь увидит стандартное окно предупреждения Excel и пока не сделает выбор код дальше не пойдет и не покажет наше сообщение. Не совсем удобно, особенно когда надо обойти штук 10 таких сообщений(часто это бывает при работе в циклах). К тому же, если пользователь откажется от удаления — лист так и не будет удален. А это уже может быть очень критично для выполнения кода в дальнейшем.
Проблема устраняется очень просто:

Sub Del_Sheet()
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    MsgBox "Лист удален", vbInformation, "www.excel-vba.ru"
    Application.DisplayAlerts = True
End Sub

Команда Application.DisplayAlerts = False «подавляет» показ системных сообщений. Это касается практически всех сообщений Excel, даже тех, что появляются перед закрытием книги без сохранения. К чему я это специально уточняю? К тому, что следует помнить, что необходимо всегда возвращать значение данного свойства в True. Иначе может получиться так, что код Вы выполнили, никаких лишних сообщений не получили. Но значение не вернули. И тогда Вы рискуете вследствие случайного нажатия того же удаления листа, вместо привычного предупреждения просто лишиться листа со всеми данными. А попытавшись закрыть книгу без сохранения, чтобы заново открыть и вернуть лист — не увидеть стандартного вопроса: «Сохранить изменения в книге?» — книга будет закрыта и возможно даже сохранена автоматически.
Поэтому отключение показа сообщений сводится к простому алгоритму:

'отключаем показ сообщений
Application.DisplayAlerts = False
'производим действия, в результате которых может появится назойливое и ненужное сообщение
'какой-то код
'обязательно возвращаем показ сообщений
Application.DisplayAlerts = True

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

Workbooks.Open FileName:="C:Documentsкнига1.xlsx", UpdateLinks:=False

Поэтому если вдруг Вам посчастливилось нарваться на сообщение, которое не отменяется командой Application.DisplayAlerts = False, то имеет смысл присмотреться к методам и свойствам объекта(или параметрам метода), который это сообщение провоцирует.


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

 

maseur

Пользователь

Сообщений: 282
Регистрация: 22.12.2012

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

Rows(«1:1»).Delete
        LastRow = Cells.Find(What:=»*», SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
   Range(Cells(1, 1), Cells(LastRow, «bd»)).Select

В том случае, если нет ни одной такой строки (пустой лист) появляется сообщение об ошибке (rine time errore 91).
Как подправить код, чтобы такая ситуация не останавливала макрос. Чтобы «ошибка» игнорировалась и он продолжал выполняться.

 

EducatedFool

Пользователь

Сообщений: 3615
Регистрация: 23.12.2012

#2

21.01.2013 03:30:45

Первой строкой в макросе:

Код
On Error Resume Next

PS: Эта директива — наиболее часто встречающаяся строка в моих программах.
Она у меня даже добавляется в начало макроса автоматически, при создании новой процедуры или функции.

Изменено: EducatedFool21.01.2013 03:31:23

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#3

21.01.2013 08:38:12

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

Код
On Error GoTo 0

Если не поставить эту строчку, то макрос будет работать в режиме «Ошибка», и если далее в коде опять возникнет ошибка, то VBA не будет на неё реагировать. Другими словами, «On Error GoTo 0» возвращает VBA в нормальный режим.

There is no knowledge that is not power

 

maseur

Пользователь

Сообщений: 282
Регистрация: 22.12.2012

Спасибо за советы.
Выбрал код от EducatedFool, поскольку им проще пользоваться.
Спасибо большое.

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#5

23.01.2013 09:24:50

Цитата
maseur пишет:
Выбрал код от EducatedFool,

Код от EducatedFool — единственный в данной теме, поэтому непонятно, из чего Вы выбирали.

Цитата
maseur пишет:
поскольку им проще пользоваться.

А это тут причём? Я лишь предупредил о подводных камнях.

There is no knowledge that is not power

 

iba2004

Пользователь

Сообщений: 1034
Регистрация: 22.12.2012

#6

23.01.2013 09:29:30

off: Кому проще??? Excel’ю??? :о))



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

есть ли способ отключить окно сообщения? Я нахожу это раздражающим…

(Это происходит с Excel Visual Basic для приложений, Outlook VBA, Word VBA и др.)


623  


2  

2 ответов:

выполните следующие действия в окне редактора VBA (под названием «Microsoft Visual Basic для приложений»):

Нажмите Меню «инструменты» и «опции«.

на вкладке «редактор» параметров снимите флажок»Автоматическая Проверка Синтаксиса поле». (Смотрите скриншот ниже.)

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

программы MS Office используют этот общий редактор VBA, поэтому, если вы измените параметр при редактировании VBA для Excel, вы изменили его для Outlook, Word и т. д.

MS VBA editor's Tools Options dialog box

в VBE, Tools-Options-Editor и снимите флажок Auto Syntax Check. Получится плохой код красный, но не даст вам всплывающее окно.

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

Есть ли способ отключить окно сообщения? Я нахожу это раздражающим…

(Это происходит с Excel Visual Basic для приложений, Outlook VBA, Word VBA и т.д.)

19 июль 2012, в 13:54

Поделиться

Источник

2 ответа

Сделайте следующее в окне редактора VBA (под названием «Microsoft Visual Basic для приложений» ):

Выберите меню « Инструменты«, а затем « Параметры«.

На вкладке «Редактор» выберите « Автоматическая проверка синтаксиса«. (См. Снимок экрана ниже.)

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

Программы MS Office используют общий редактор VBA, поэтому, если вы изменяете параметр при редактировании VBA для Excel, вы изменили его на Outlook, Word и т.д.

Изображение 3732

ray
19 июль 2012, в 14:10

Поделиться

В VBE выберите Tools — Options — Editor и снимите флажок Auto Syntax Check. Он превратит плохой код в красный цвет, но не даст вам всплывающее окно.

Dick Kusleika
19 июль 2012, в 13:56

Поделиться

Ещё вопросы

  • 0Получение ошибки в Nested Update Query
  • 1Слушатель действий в массиве кнопок J, расположенных в 5 разных JPanels
  • 0Как добавить оператор if в функцию переключения
  • 0ScrollTop при загрузке страницы
  • 0MariaDB ERROR 1045 (28000): доступ запрещен для пользователя ‘root’ @ ‘localhost’ (используется пароль: НЕТ)
  • 0Как хранить относительно статичные данные?
  • 0Отключить HTML-ссылку после того, как она была нажата
  • 0Получить информацию о клиенте в бэкэнд-панели администратора
  • 0jQuery Rails и подсказка не отображаются
  • 1Есть ли вызов функции для входа в отладчик?
  • 0В SQL или mySQL как найти ключ с наибольшей суммой в другом столбце, в то время как ключ отображается в двух столбцах?
  • 0выражение angularjs, если еще условие
  • 0Ajax-запрос не отправляет данные моего объекта
  • 1тайм-аут истек, отказавшись от пробуждения!
  • 02 плавающих div бок о бок, без ширины
  • 0Получение Integer / s (ID #) из URL на основе текущей веб-страницы
  • 1Избегайте сбрасывать нули для запуска функции
  • 0Как обновить только div, а не всю страницу
  • 0Ckeditor в обзорах не показывает HTML в веб-интерфейсе Opencart
  • 1Передайте ветку git в качестве параметра conda environment.yml для пакета pip
  • 0Прочитать файл данных, содержащий объекты 2 разн. классы
  • 1Добавление к значениям словаря
  • 0Как добавить токены аутентификации в угловой $ http вызов
  • 1Python CMD Синтаксическая ошибка
  • 0Невозможно сбросить флажки для снятых в угловых js
  • 0Не разрешать браузеру масштабировать текст
  • 0Угловой перевод: повторить на объекте json
  • 1Обменяйте ключ и значение JSON
  • 1Счетчик ссылок веб-страницы Python
  • 0WMF & Qt Не удается получить сигнал в слоте от OnProcessSample
  • 1Как использовать атрибут сеанса (код капчи) в пользовательском ограничении проверки bean-компонента JSR-303?
  • 0C ++ матричное умножение разных измерений
  • 1Встроить веб-контент Liferay в существующий веб-контент LifeRay
  • 0Хранение идентификаторов таблиц внутри другой таблицы для последующего извлечения данных
  • 0JQuery — показать / скрыть не работает
  • 0Как можно использовать jQuery для изменения HTML-страниц
  • 1Библиотека для чтения QR-кодов
  • 1Геолокация для iPhone JavaScript Веб-приложение
  • 0Метод удаления C ++ AVLtree
  • 0PHP, MYSQL: выбрать внутри цикла Loop?
  • 0Попытка иметь два отсчета JS на одной странице
  • 0Инициализация переменных JavaScript для повторения раздела в форме
  • 1Может ли UserControl скрывать себя через собственный XAML
  • 0Почему Flask возвращает <embed> файлы для загрузки вместо их отображения
  • 1Нестандартное использование уведомления об ожидании в параллельных программах Java
  • 0Изменить цвет div на основе значения цвета из JSON
  • 0preg для извлечения из тега h1
  • 1Проверьте, загрузил ли канал YouTube видео
  • 1TDD в текстовом поле asp.net mvc
  • 0Split / Explode in String идентифицирует только первый элемент (Символ или Слово)?

Сообщество Overcoder

Существует три типа ошибок в программировании: (a) синтаксические ошибки, (b) ошибки времени выполнения и (c) логические ошибки.

Синтаксические ошибки

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

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

Ошибки во время выполнения

Ошибки времени выполнения, также называемые исключениями, возникают во время выполнения после интерпретации.

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

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

Логические ошибки

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

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

Например, деление числа на ноль или написанного скрипта, который входит в бесконечный цикл.

Err Object

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

пример

В следующем примере Err.Number дает номер ошибки, а Err.Description – описание ошибки.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

Обработка ошибок

VBA включает подпрограмму обработки ошибок, а также может использоваться для отключения подпрограммы обработки ошибок. Без оператора On Error любая ошибка во время выполнения является фатальной: отображается сообщение об ошибке, и выполнение резко останавливается.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Линия GoTo

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

Перейти 0

Отключает включенный обработчик ошибок в текущей процедуре и сбрасывает его в Nothing.

GoTo -1

Отключает включенное исключение в текущей процедуре и сбрасывает его в Nothing.

Продолжить дальше

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

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Vba если ошибка тогда
  • Vba если ошибка то дальше