Я пытаюсь написать сценарий, который открывает много файлов Excel. Я получаю подсказку:
This workbook contains links to other data sources.
Я хочу, чтобы это сообщение не появлялось, чтобы мой сценарий мог просто автоматически проходить через все книги, и мне не приходилось нажимать Don't Update
для каждой из них. В настоящее время я использую следующее:
function getWorkbook(bkPath as string) as workbook
Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)
end function
Однако сообщение все еще появляется. Как я могу это подавить?
РЕДАКТИРОВАТЬ: похоже, что это сообщение появляется для книг с неработающими ссылками; Я не видел This workbook contains one or more links that cannot be updated
сообщения, потому что установил DisplayAlerts
значение false. Книги связаны с эквивалентными файлами в папке на нашем сервере Windows, поэтому, когда соответствующий файл удаляется из этой папки (что происходит в рамках нашего бизнес-процесса), ссылка разрывается. Можно ли отключить предупреждение при разрыве ссылки?
Кроме того, я использую Excel 2010.
Ответы:
ОБНОВИТЬ:
После того, как все детали обобщены и обсуждены, я потратил 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. Простое приложение. Рабочие тетради. Открыть
Неудивительно - при этом появляются ОБЕИ предупреждения, как и для ручного открытия выше.
2. Application.DisplayAlerts = False
Этот код заканчивается ПРЕДУПРЕЖДЕНИЕМ №1 , и при нажатии любой опции (
Update
/Don't Update
) дальнейших предупреждений НЕ выводится, т.Application.DisplayAlerts = False
Е. Подавляется ПРЕДУПРЕЖДЕНИЕ №2 .3. Application.AskToUpdateLinks = False
Напротив
DisplayAlerts
, этот код заканчивается только ПРЕДУПРЕЖДЕНИЕМ №2 , т.е.Application.AskToUpdateLinks = False
подавляет ПРЕДУПРЕЖДЕНИЕ №1 .4. Двойная ложь
По-видимому, этот код заканчивается подавлением ОБЕИХ ПРЕДУПРЕЖДЕНИЙ .
5. UpdateLinks: = False
Наконец, это однострочное решение (первоначально предложенное
@brettdj
) работает так же, как Double False: НИКАКИХ ПРЕДУПРЕЖДЕНИЙ не отображаются!Выводы
За исключением хорошей практики тестирования и очень важного решенного случая (я могу сталкиваться с такими проблемами каждый день, отправляя свои книги третьим лицам, и теперь я подготовлен), я узнал еще 2 вещи:
Большое спасибо всем, кто внес свой вклад в решение, и особенно OP, который поднял вопрос. Надеюсь, мои исследования и подробное описание шагов тестирования были полезны не только для меня)
Общий доступ к файлу с примерами кода выше (многие строки намеренно прокомментированы): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Исходный ответ (протестирован для Excel 2007 с определенными параметрами):
Этот код отлично работает для меня - он просматривает ВСЕ файлы Excel, указанные с использованием подстановочных знаков в
InputFolder
:Пробовал с книгами с недоступными внешними ссылками - предупреждений нет.
Пример файла: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
источник
Application.DisplayAlerts = False
не отключит эти предупреждения :)?Application.AskToUpdateLinks
окно немедленного выполнения. Это уже установлено на false или это правда ...Откройте редактор VBA в Excel и введите это в непосредственном окне (см. Снимок экрана)
Закройте Excel, а затем откройте свой файл. Больше не будет. Не забудьте сбросить его при закрытии книги, иначе он не будет работать и для других книг.
Скриншот :
РЕДАКТИРОВАТЬ
Итак, применив его к вашему коду, ваш код будет выглядеть так
СЛЕДОВАТЬ ЗА
Sigil, приведенный ниже код работает и с файлами с битыми ссылками. Вот мой тестовый код.
Условия испытаний
Sample1.xlsx
иSample2.xlsx
и сохранить их наC:\
A1
изSample1.xlsx
, введите эту формулу='C:\[Sample2.xlsx]Sheet1'!$A$1
Sample
. Вы заметите, что не получите подсказки.Код
источник
Application.DisplayAlerts = False
?Excel 2016 У меня была аналогичная проблема, когда я создал книгу / файл, а затем изменил имена, но каким-то образом сохранилось старое имя книги. После долгих поисков ... ну, не нашел там окончательного ответа ...
Перейдите в DATA -> Edit Link -> Startup Prompt (внизу), затем выберите лучший вариант для вас.
источник
Я хотел подавить запрос, который спрашивает, хотите ли вы обновить ссылки на другую книгу, когда моя книга открывается вручную в Excel (в отличие от открытия ее программно через VBA). Я попытался включить:
Application.AskToUpdateLinks = False
в качестве первой строки в свойAuto_Open()
макрос, но это не сработало. Однако я обнаружил, что если вы поместите его вместоWorkbook_Open()
функции вThisWorkbook
модуле, он будет работать блестяще - диалоговое окно подавляется, но обновление по-прежнему происходит в фоновом режиме.источник
Workbook_Open()
событие для каждой книги в моем целевом наборе.(У меня недостаточно очков репутации, чтобы добавить комментарий, но я хочу внести некоторую ясность в ответы здесь)
Application.AskToUpdateLinks = False, вероятно, не то, что вам нужно.
Если установлено значение False, MS Excel будет пытаться автоматически обновить ссылки он просто не предложит пользователю заранее, Сорта нелогичным.
Правильное решение, если вы хотите открыть файл без обновления ссылок, должно быть:
Workbook.Open (UpdateLinks: = 0)
Связанная ссылка: Разница в AskToUpdateLinks = False и UpdateLinks: = 0
источник
Я нашел временное решение, которое, по крайней мере, позволит мне выполнить эту работу. Я написал короткий сценарий AutoIt, который ожидает появления окна «Обновить ссылки», а затем нажимает кнопку «Не обновлять». Код выглядит следующим образом:
Пока что это работает. Однако мне бы очень хотелось найти решение, полностью состоящее из VBA, чтобы я мог сделать это автономное приложение.
источник
Надеюсь внести дополнительный вклад в решение этого вопроса (или его части).
Это будет работать для открытия
Excel
файла из другого. В строке кода мистера Питера Л. для изменения используйте следующее:Это в
MSDS
. Эффект состоит в том, что он просто обновляет все (да, все) без предупреждения. Это также можно проверить, если вы запишете макрос.В
MSDS
, это относится кMS EXCEL 2010
и2013
. Я думаю, чтоMS EXCEL 2016
это тоже покрыто.У меня есть
MS EXCEL 2013
и есть ситуация почти такая же, как в этой теме. Итак, у меня есть файл (назовите егоA
) сWorkbook_Open
кодом события, который всегда застревает в приглашении ссылки на обновление . У меня есть еще один файл (назовите егоB
), связанный с этим, и сводные таблицы заставляют меня открыть файл,A
чтобы можно было загрузить модель данных. Поскольку я хочу открытьA
файл в фоновом режиме, я просто использую строку, которую написал выше, с символомWindows("A.xlsx").visible = false
, и, помимо большего времени загрузки, я открываюA
файл изB
файла без проблем или предупреждений и полностью обновляю .источник