ОНОВЛЕННЯ:
Після того як всі деталі були узагальнені та обговорені, я витратив 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 = Неправильно
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 = Неправильно
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: = Неправдиво
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False
Нарешті, це однорядкове рішення (спочатку запропоноване @brettdj
) працює так само, як і подвійне помилкове: НЕ відображаються ПОПЕРЕДЖЕННЯ !
Висновки
Окрім належної практики тестування та дуже важливого вирішеного випадку (я можу щодня стикатися з такими проблемами під час надсилання своїх робочих зошитів третій стороні, і тепер я готовий), ще 2 речі вивчені:
- Параметри Excel НЕ мають значення, незалежно від версії - особливо, коли ми підходимо до рішень VBA.
- Кожна неприємність має коротке та елегантне рішення - разом із не очевидним та складним. Ще один доказ цього!)
Дуже дякую всім, хто сприяв вирішенню, і особливо ОП, які порушили питання. Сподіваюсь, мої дослідження та детально описані кроки тестування були корисними не лише для мене)
Зразковий файл із наведеними вище зразками коду надається спільним (багато рядків коментується навмисно): 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