Статья может показаться странной, но...Спрос на данную тему достаточно велик. Тем, кто программирует на 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 'производим действия, в результате которых может появится назойливое и ненужное сообщение 'какой-то код 'обязательно возвращаем показ сообщений Application.DisplayAlerts = True |
Но следует так же учитывать, что некоторые сообщения невозможно отменить даже этим методом. Например, при открытии кодом книги с нарушенными связями Excel запросит их обновление и указание источника, если это задано в свойствах книги. Чтобы избежать сообщений об изменении связей при открытии книг кодом можно использовать свойство книги UpdateLinks:
Workbooks.Open FileName:="C:\Documents\книга1.xlsx", UpdateLinks:=False |
Поэтому если вдруг Вам посчастливилось нарваться на сообщение, которое не отменяется командой
В большой программе с множеством динамических графиков (то-есть графиков, в которых число точек заранее неизвестно и определяется формулами типа =OFFSET(,0,0,COUNT(.....),1) всё время выскакивает сообщение "Excel found a problem with one or more formula references in this Worksheet.....". Проверил всё, что только можно. Ошибок не нашёл. Стёр (в виде эксперимента) все динамические массивы. Сообщение стало выскакивать реже (фактически только при открытии и закрытии книги), но не исчезло. Что делать?
Иосиф, как Ваша проблема относится к данной статье? У Вас сам текст ошибки пишет, что обнаружены проблемы с ссылками в формулах. Скорее всего есть какие-то лишние связи, что к данной статье не очень подходит. Попробуйте поискать проблему, используя советы из этой статьи:Невозможно разорвать связи с другой книгой