2015-08-26 4 views
1

Я искал широко и широко для ответа на этот вопрос, но ничего, что я пытаюсь, кажется, работает. Вот где я до сих пор.Excel - ссылки, не обновляемые с помощью VBA

У меня есть две книги Excel. Первая книга - это книга, которую люди могут редактировать. Он содержит такие элементы, как раскрывающиеся меню, которые функционируют только при привязке к исходному файлу. Вторая книга является исходным файлом. Он содержит информацию, такую ​​как таблицы данных, которые отображаются в списках выпадающих меню в первой книге. (Например, список заболеваний, таких как астма, диабет и т. Д., И люди могут выбрать условие из списка.)

Проблема, с которой я сталкиваюсь в данный момент, заключается в том, что эти ссылки больше не обновляются должным образом.

Чтобы уточнить, они будут обновляться, если я открою исходный файл, а затем выходной файл вручную. В менеджере имен, ссылки будут выглядеть следующим образом:

Исходный_файл NameRef1

Потому что я не хочу, чтобы люди должны открыть файлы по одному вручную, я написал несколько VBA, который открывает источник автоматически, когда вы открываете выходной файл.

Dim app As New Excel.Application 
Dim book As Excel.Workbook 
Private Sub Workbook_Open() 
app.Visible = True 
Set book = app.Workbooks.Open("C:\Users\user_000\Desktop\ExampleFolder\SourceFile.xlsm") 
End Sub 

Он отлично работает, но ссылки не будут обновляться, несмотря на то, что они установлены для автоматического обновления. На этом этапе, когда я перейду в диспетчер имен, ссылки теперь изменились на весь путь к файлу. По какой-то причине каждый раз, когда это было сделано (например, когда я переместил файл в другое место), он перестает обновлять ссылки.

Я не понимаю, почему Excel не нравится, когда вы используете пути к файлам в качестве ссылок в менеджере имен. Он всегда работает, когда я ссылаюсь только на имя файла. Я пробовал все, что я мог придумать в VBA, я изменил параметры безопасности макросов, чтобы включить практически все, но это не имеет никакого значения.

Я пробовал:

ThisWorkbook.UpdateLink 

Но все это я получаю ошибки во время выполнения 1004: Метод 'UpdateLink' объекта '_Workbook' не удалось.

ответ

4

Это очень легко исправить!

Код, который вы написали запускает новый экземпляр Excel

Dim app As New Excel.Application 

Именно в этом случае открываемых в исходной книге с вашими данными. Компоны excel в выходном файле не смогут извлекать данные из этой выходной книги, если она не открыта в ТОЧНОМ экземпляре excel!

Так просто изменить ваш код на что-то вроде этого:

Private Sub Workbook_Open() 
Set book =  Workbooks.Open("C:\Users\user_000\Desktop\ExampleFolder\SourceFile.xlsm") 
End Sub