Хитрости »
Основные понятия (23)
Сводные таблицы и анализ данных (9)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (14)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (63)
Разное (38)
Баги и глюки Excel (2)

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

Статья может показаться странной, но...Спрос на данную тему достаточно велик. Тем, кто программирует на 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 Outlook Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Надстройки Настройка Печать Поиск данных Политика Конфиденциальности Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx анализ данных баги и глюки в Excel ссылки
Обсуждение: 11 комментариев
  1. Мария:

    Спасибо за краткий и понятный ответ!
    Однако даже после установки Application.DisplayAlerts = False при открыти книги продолжает появляться запрос на обновление ее связей

  2. Правильно. Потому как сообщение об обновлении связей относится как раз к тем, которые невозможно подавить отключением данного параметра. Если открываете книгу макросом методом Workbooks.Open, то почитайте все параметры этого метода. Там присутствует такой как UpdateLinks. Если указать False, то обновление происходить не должно.

  3. Ирина:

    Дмитрий, а вот такой вопрос.
    у меня есть файл1 в котором я написала код, который перед закрытием выдает сообщение. Это необходимо, для пользователей которые будут использовать файл1. Но! У меня есть другой файл2, который кодом заполняется на базе файл1. Т.е. он открывает файл1, берет оттуда данные и закрывает. Так вот в коде файла 2 я разместила команду Application.DisplayAlerts = False, но это не помогает. Сообщение все-равно выскакивает при закрытии файла1. Не знаете как это устранить?

  4. Ирина, перед закрытием/открытием файла вставьте строчку:
    Application.EnableEvents = False

    только затем не забудьте вернуть значение этому свойству:
    Application.EnableEvents = True

  5. Ирина:

    Спасибо! помогло.

  6. The_Razer:

    Здравствуйте. Такой вопрос: возможно ли удалить сообщение о защите ячеек от редактирования?

  7. Ильмир:

    The_Razer :
    Здравствуйте. Такой вопрос: возможно ли удалить сообщение о защите ячеек от редактирования?

    Аналогичный вопрос

  8. Вера:

    Добрый день!
    Подскажите, пожалуйска, как в появляющемся системном диалоговом сообщении при помощи макроса нажать на "Yes"?
    Эксель при открытии файла пишет: The file you are truing to open ,..., is in different format than specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now?"
    Три варианта ответа: Yes, No, Help
    Нужно, чтобы макрос сам нажимал на "Yes".

    • Вера, на будущее: вопрос к теме не относится. Проигнорировать сообщения и программно нажать кнопку - разные вещи.
      В Вашем случае следует внимательно присмотреться к параметрам Workbooks.Open(). Там есть один - CorruptLoad, который отвечает за открытие книги в таких случаях. Установите его в xlRepairFile или xlExtractData и посмотрите какой результат подойдет больше.

  9. Ants:

    Спасибо большое. Очень помогли.

Поделитесь своим мнением

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


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти
Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2018 Excel для всех   Войти