Хитрости »
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
ссылки
статистика
Существует три типа ошибок в программировании: (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.
Продолжить дальше
Указывает, что при возникновении ошибки во время выполнения элемент управления переходит к оператору, который следует сразу за оператором, в котором произошла ошибка, и выполнение продолжается с этой точки.
когда вы редактируете макрос или функцию Microsoft Office VBA, вы часто перемещаете курсор из строки, которую вы еще не закончили. Например, чтобы скопировать что-то, что вы хотите вставить в эту строку. Но, если эта частичная строка не является синтаксически допустимой, редактор VBA прерывает вашу работу, выводя сообщение «ошибка компиляции», которое должно быть отклонено.
есть ли способ отключить окно сообщения? Я нахожу это раздражающим…
(Это происходит с Excel Visual Basic для приложений, Outlook VBA, Word VBA и др.)
707
2
2 ответов:
выполните следующие действия в окне редактора VBA (под названием «Microsoft Visual Basic для приложений»):
Нажмите Меню «инструменты» и «опции«.
на вкладке «редактор» параметров снимите флажок»Автоматическая Проверка Синтаксиса поле». (Смотрите скриншот ниже.)
Это изменение не останавливает компиляцию редактора в фоновом режиме и не помечает синтаксические ошибки красным цветом (или любое другое форматирование, указанное в параметрах вкладка «формат»).
программы MS Office используют этот общий редактор VBA, поэтому, если вы измените параметр при редактировании VBA для Excel, вы изменили его для Outlook, Word и т. д.
в VBE, Tools-Options-Editor и снимите флажок Auto Syntax Check. Получится плохой код красный, но не даст вам всплывающее окно.
Float |
|
1 |
|
Не показывать окошко с сообщением22.11.2006, 19:02. Показов 3873. Ответов 8
Как отключить появление окошка с вопросом «Заменить содержимое конечных ячеек?» — появляется при копировании области данных на лист? |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
22.11.2006, 19:02 |
8 |
0 / 0 / 0 Регистрация: 03.08.2010 Сообщений: 37 |
|
22.11.2006, 19:15 |
2 |
docmd.setWarnings false
0 |
Float |
|
22.11.2006, 19:56 |
3 |
куда вставить эту команду? |
0 / 0 / 0 Регистрация: 03.08.2010 Сообщений: 37 |
|
22.11.2006, 20:22 |
4 |
Эта команда работает в любом программном модуле (макросе, функциях и т. д.).
0 |
Float |
|
22.11.2006, 21:29 |
5 |
В Сервисе Параметры Правка ……. нет ничего такого |
Float |
|
23.11.2006, 12:38 |
6 |
Понимаю, что для многих это элементарно, но помогите избавиться от этого сообщения!!!!!! |
Maxksa |
|
23.11.2006, 17:23 |
7 |
Application.DisplayAlerts = False |
Pavel55 971 / 353 / 135 Регистрация: 27.10.2006 Сообщений: 764 |
||||||||
23.11.2006, 20:07 |
8 |
|||||||
Хм, ну не совсем так
отключит вообще все оповещения, и в том числе важные: на удаление листа, сохранение книги и т.д. Я думаю, ему надо отключить сообщение о перезаписи непусных ячеек, а это, вроде, с помощью VBA так
А с помощью рук, как уже сказали Сервис — Параметры — Правка и снять галочку Предупреждать перед перезаписью ячеек
0 |
Float |
|
23.11.2006, 22:44 |
9 |
1. Application.AlertBeforeOverwriting = False — вообще не дает вставить данные на лист |
Создал простенький макрос, чтобы в выделенном фрагменте документа ms office word удалять все пустые строки, но после его выполнения появляется уведомление: «Мы сделали несколько замен в выделенном фрагменте. Продолжить поиск в оставшейся части документа?». Можно ли как то это уведомление отключить в коде макроса или может каким то другим способом? код макроса прикрепляю. (В VBA не силен, от слова совсем).
Макрос тут
Sub Макрос1()
‘
‘ Макрос1 Макрос
‘
‘
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = «^p^p»
.Replacement.Text = «^p»
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Когда вы редактируете макрос или функцию 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 и т.д.
ray
19 июль 2012, в 14:10
Поделиться
В VBE выберите Tools — Options — Editor и снимите флажок Auto Syntax Check. Он превратит плохой код в красный цвет, но не даст вам всплывающее окно.
Dick Kusleika
19 июль 2012, в 13:56
Поделиться
Ещё вопросы
- 0Отметить даты в календаре бронирования как полностью доступные, частично доступные или недоступные
- 0В этом цикле for, как перехватить оба сообщения, а не только первое? (JQuery)
- 0Бродячая разработка
- 0ОБНОВЛЕНИЕ и ВЫБОР из одной таблицы в одном запросе
- 0Перенаправить одну страницу с HTTPS на HTTP
- 1404 Страницы с ошибками не отображаются при доступе к несуществующим страницам JSF в WildFly
- 1Запустить подпроцесс Python до тех пор, пока больше не возникнет ошибка?
- 1стоимость возврата объектов в функцию для подъема
- 0Проблема выравнивания в контейнере формы
- 0как получить все данные из запроса и поставить его в поле ввода с помощью jquery
- 0Rapidxml и начальные теги
- 0Странная ошибка: AngularJS может искать отдельные поля, но не несколько полей
- 0SQL-запрос выбора, чтобы найти количество из данной таблицы
- 1Linq to XML: проблема с двоеточием в тегах xml
- 1Шифрование с использованием AES 256 в Android и IPhone (другой результат)
- 0Диалоговое окно Jquery не остается открытым в элементе формы
- 0Наложение изображений в галерее с изображением, которое находится над
- 1Метод наименьших квадратов
- 1Проблема в применении функции во фрейме данных Pandas
- 1Создание пустого массива из байтов, упакованных с помощью struct
- 1Как связать сохраненную аннотацию для PDF
- 1API Graph Facebook: невозможно передать массив категорий на Python
- 0Как сделать ссылку на изображение встроенной рядом с кнопкой?
- 1Утечка памяти в Android
- 0поиск в базе данных с использованием php-сессий не возвращает никаких результатов или ошибок
- 1Чтобы просмотреть веб-страницу внутри вашего приложения?
- 1Потяните Gmails в Google Sheet
- 1Случайное значение для каждой строки в кадре данных панд
- 0По умолчанию аргумент класса ofstream в функции
- 1Ненагружаемые плагины от утечки в сборе в моно
- 1Установить размер компонента в JPanel
- 1Флаг аппаратного ускорения
- 1Как создать универсальное сочетание клавиш?
- 1Windows зависает во время (или после) выполнения кода Java, генерирующего много изображений
- 1Ошибка пользовательского шрифта
- 1Читайте, что Autodoc Документов, кажется, терпит неудачу на строке формата Python 3.6
- 0Якоря не работают на одной странице сайта
- 1добавить несколько списков в одном упражнении
- 0управление наследованием памяти
- 1Используйте HashMap или что-то подобное для хранения списков объектов
- 1Веб-сервисы: Ошибка в десериализации тела ответного сообщения
- 1Как упорядочить существующий список чисел Python последовательно в памяти?
- 0MySQL объединяет продукты для продажи как один
- 0Все еще не добавлено в DOM, но если и оповещение / подтверждение вставлено получить идентификатор тега
- 0значение по умолчанию не исчезает, когда я выбираю другое значение в раскрывающемся списке
- 0Как мне найти каталог данных для MySQL Server 5.7 в Windows 10?
- 1Строковые хэш-коды
- 0Клиент C ++ не может отправить на сервер / Winsock
- 1Насколько близко мы можем программно добраться до аппаратного обеспечения устройства Android?
- 0SQLSTATE [HY000]: общая ошибка: 1364 Поле ‘name’ не имеет значения по умолчанию laravel 5.5
February 13, 2014/
Chris Newman
Writing VBA Code Can’t Be This Annoying, Can It?
When I first started coding in the Visual Basic Editor (VBE) I would always get so annoyed with the message box alerts that would pop up every time I didn’t use proper code syntax. This caused me to get distracted since every time I didn’t type something in properly I would get an error alert and have to click the OK button (usually occurred every other minute).
Being new to using the Visual Basic Editor, I thought this was just normal and I had to live with the annoying pop-ups. After I got more comfortable with the editor I started playing around with the options and stumbled upon a setting that I am so thankful exists! This setting allowed me to turn off the annoying syntax error message alerts and I have not seen one since!
Steps To Get Rid Of The Syntax Error Alerts
Step 1: In the Visual Basic Editor (shortcut: Alt + F11) open the Tools menu and select Options…
Step 2: In the Options dialog box, ensure the Auto Syntax Check checkbox is NOT checked in the Code Settings section. This turns off the error messages while still coloring incorrect syntax code with red font.
Hit the OK button and you should be error message free from now on! Woohoo!!
My Question To You!
So I’m curious, was I just naive or did it take you a long time to figure out how to rid your life of VBA Error Alerts? Leave a comment below and let me know how long it took you!
About The Author
Hey there! I’m Chris and I run TheSpreadsheetGuru website in my spare time. By day, I’m actually a finance professional who relies on Microsoft Excel quite heavily in the corporate world. I love taking the things I learn in the “real world” and sharing them with everyone here on this site so that you too can become a spreadsheet guru at your company.
Through my years in the corporate world, I’ve been able to pick up on opportunities to make working with Excel better and have built a variety of Excel add-ins, from inserting tickmark symbols to automating copy/pasting from Excel to PowerPoint. If you’d like to keep up to date with the latest Excel news and directly get emailed the most meaningful Excel tips I’ve learned over the years, you can sign up for my free newsletters. I hope I was able to provide you with some value today and I hope to see you back here soon!
— Chris
Хитрости »
2 Декабрь 2011 57703 просмотров
Как запретить сообщения?
Статья может показаться странной, но…Спрос на данную тему достаточно велик. Тем, кто программирует на 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
ссылки
статистика