Хитрости »
2 Декабрь 2011 57715 просмотров
Как запретить сообщения?
Статья может показаться странной, но…Спрос на данную тему достаточно велик. Тем, кто программирует на 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
ссылки
статистика
Excel для Microsoft 365 Word для Microsoft 365 Outlook для Microsoft 365 PowerPoint для Microsoft 365 Access для Microsoft 365 OneNote для Microsoft 365 Excel 2021 Word 2021 Outlook 2021 PowerPoint 2021 Access 2021 Excel 2019 Word 2019 Outlook 2019 PowerPoint 2019 Access 2019 Excel 2016 Word 2016 Outlook 2016 PowerPoint 2016 Access 2016 OneNote 2016 Access 2013 Еще…Меньше
На панели сообщений отображаются оповещения системы безопасности о потенциально небезопасном активном содержимом (например, макросах, ActiveX элементах управления, подключениях к данным) или конфиденциальной информации в Office файле. На панели появляется желтое или красное оповещение со значком (например, щитом), предупреждающее вас о потенциальных проблемах.
Если вы уверены в том, что источник содержимого надежен, вы можете выбрать команду Включить содержимое в желтом оповещении на панели сообщений, чтобы обозначить документ как надежный или разрешить использование содержимого в рамках данного сеанса. В красном оповещении на панели сообщений вы можете щелкнуть текст предупреждения.
Вы также можете щелкнуть вкладку «Файл «, чтобы просмотреть дополнительные сведения и параметры.
Вот несколько примеров оповещений на панели сообщений.
Чтобы отключить предупреждения системы безопасности, можно отключить саму панель сообщений.
Важно: Рекомендуется не изменять параметры безопасности в центре управления безопасностью. Это может привести к потере или краже данных, а также снижению уровня защиты компьютера или сети.
Включение и отключение оповещений системы безопасности и подсказок политики на панели сообщений
-
На вкладке Файл выберите элемент Параметры.
-
Выберите Центр управления безопасностью > Параметры центра управления безопасностью.
-
Щелкните Панель сообщений.
При выборе параметров на вкладке Панель сообщений руководствуйтесь приведенными ниже сведениями.
-
Показывать панель сообщений во всех приложениях, если активное содержимое, например ActiveX элементов управления и макросов, заблокировано— это значение по умолчанию. Панель сообщений появляется каждый раз при отключении потенциально небезопасного содержимого.
Примечание: Этот параметр отключается и панель сообщений не появляется, если в области Параметры макросов центра управления безопасностью включен параметр Отключить все макросы без уведомления.
-
Никогда не отображайте сведения о заблокированном содержимом. Этот параметр отключает панель сообщений и не отображает оповещений о проблемах безопасности, независимо от параметров безопасности в центре управления безопасностью.
Примечание: Этот параметр не изменяет панель сообщений, которую вы видите, Office в защищенном представлении.
-
Показывать подсказку политики на панели сообщений. Если выключить этот параметр, советы политики будут отключены, если ваша организация их не требует.— При проверке этого параметра на панели сообщений отображается подсказка политики, если документ конфликтует с политикой в вашей организации. Например, подсказка политики может появиться, если документ содержит конфиденциальную информацию, такую как номера кредитных карт или счета клиентов.
Примечание: Чтобы отображались подсказки политики, администратор должен сначала создать правило, в соответствии с которым будут появляться уведомления. В организации может действовать политика, согласно которой подсказки отображаются даже в том случае, если эта функция отключена. Как правило, информационные подсказки политики можно отключить, но если от пользователя требуются какие-либо действия, оповещения на панели сообщений будут отображаться даже в том случае, если подсказки политики отключены.
-
Нужна дополнительная помощь?
DisplayAlerts = False не всегда помогает.
Следует учитывать, что некоторые сообщения невозможно отменить даже этим методом. Например, при открытии кодом книги с нарушенными связями Excel запросит их обновление и указание источника, если это задано в свойствах книги. Чтобы избежать сообщений об изменении связей при открытии книг кодом можно использовать свойство книги UpdateLinks:
Workbooks.Open FileName:=»C:Documentsкнига1.xlsx», UpdateLinks:=False
Поэтому если вдруг Вам посчастливилось нарваться на сообщение, которое не отменяется командой Application.DisplayAlerts = False, то имеет смысл присмотреться к методам и свойствам объекта(или параметрам метода), который это сообщение провоцирует.
Источник тут: https://www.excel-vba.ru/chto-… bshheniya/
тогда идите дальше( в задании параметров метода open)
Opens a workbook.
expression.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
— там есть параметр
UpdateLinks Optional Variant. Specifies the way links in the file are updated. If this argument is omitted, the user is prompted to specify how links will be updated. Otherwise, this argument is one of the values listed in the following table.
Value Meaning
0 Doesn’t update any references
1 Updates external references but not remote references
2 Updates remote references but not external references
3 Updates both remote and external references
ОТключение системных сообщений |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |