ОБНОВИТЬ:
После того, как все детали обобщены и обсуждены, я потратил 2 часа на проверку вариантов, и это обновление расставит все точки над всеми i
.
Препараты
Прежде всего, я выполнил чистую установку Office 2010 x86 на виртуальной машине Clean Win7 SP1 Ultimate x64 на базе VMWare (это обычная процедура для моих повседневных задач тестирования, поэтому многие из них у меня развернуты).
Затем я изменил только следующие параметры Excel (т.е. все остальные оставлены без изменений после установки):
Advanced > General > Ask to update automatic links
проверил :
Trust Center > Trust Center Settings... > External Content > Enable All...
(хотя тот, который относится к подключению данных, скорее всего, не важен для этого случая):
Предварительные условия
Я подготовил и поместил в C:\
книгу в точности в соответствии с @Siddharth Rout
предложениями в его обновленном ответе (опубликованном для вашего удобства): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Связанная книга была затем удалена, так что эта ссылка в общей книга недоступна (точно).
Открытие вручную
Вышеупомянутый общий файл показывает при открытии (имея перечисленные выше параметры Excel) 2 предупреждения - в порядке появления:
ПРЕДУПРЕЖДЕНИЕ # 1
После нажатия на кнопку Update
я ожидал получить еще один:
ПРЕДУПРЕЖДЕНИЕ # 2
Итак, я полагаю, моя среда тестирования теперь в значительной степени похожа на OP
's) Пока все хорошо, мы наконец переходим к
Открытие VBA
Сейчас пошагово попробую все возможные варианты, чтобы картина была наглядной. Я поделюсь только соответствующими строками кода для простоты (полный образец файла с кодом будет предоставлен в конце).
1. Простое приложение. Рабочие тетради. Открыть
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Неудивительно - при этом появляются ОБЕИ предупреждения, как и для ручного открытия выше.
2. Application.DisplayAlerts = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Этот код заканчивается ПРЕДУПРЕЖДЕНИЕМ №1 , и при нажатии любой опции ( Update
/ Don't Update
) дальнейших предупреждений НЕ выводится, т. Application.DisplayAlerts = False
Е. Подавляется ПРЕДУПРЕЖДЕНИЕ №2 .
3. Application.AskToUpdateLinks = False
Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True
Напротив DisplayAlerts
, этот код заканчивается только ПРЕДУПРЕЖДЕНИЕМ №2 , т.е. Application.AskToUpdateLinks = False
подавляет ПРЕДУПРЕЖДЕНИЕ №1 .
4. Двойная ложь
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
По-видимому, этот код заканчивается подавлением ОБЕИХ ПРЕДУПРЕЖДЕНИЙ .
5. UpdateLinks: = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False
Наконец, это однострочное решение (первоначально предложенное @brettdj
) работает так же, как Double False: НИКАКИХ ПРЕДУПРЕЖДЕНИЙ не отображаются!
Выводы
За исключением хорошей практики тестирования и очень важного решенного случая (я могу сталкиваться с такими проблемами каждый день, отправляя свои книги третьим лицам, и теперь я подготовлен), я узнал еще 2 вещи:
- Параметры Excel ДЕЙСТВУЮТ независимо от версии, особенно когда речь идет о решениях VBA.
- У каждой проблемы есть короткое и изящное решение - вместе с неочевидным и сложным. Еще одно тому доказательство!)
Большое спасибо всем, кто внес свой вклад в решение, и особенно OP, который поднял вопрос. Надеюсь, мои исследования и подробное описание шагов тестирования были полезны не только для меня)
Общий доступ к файлу с примерами кода выше (многие строки намеренно прокомментированы): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Исходный ответ (протестирован для Excel 2007 с определенными параметрами):
Этот код отлично работает для меня - он просматривает ВСЕ файлы Excel, указанные с использованием подстановочных знаков в InputFolder
:
Sub WorkbookOpening2007()
Dim InputFolder As String
Dim LoopFileNameExt As String
InputFolder = "D:\DOCUMENTS\" 'Trailing "\" is required!
LoopFileNameExt = Dir(InputFolder & "*.xls?")
Do While LoopFileNameExt <> ""
Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
Application.DisplayAlerts = True
LoopFileNameExt = Dir
Loop
End Sub
Пробовал с книгами с недоступными внешними ссылками - предупреждений нет.
Пример файла: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm