VBA Update Внешняя ссылка причина Ошибка времени выполнения - PullRequest
0 голосов
/ 07 декабря 2018

Очень простой код VBA для обновления внешней ссылки Excel -

ThisWorkbook.UpdateLink Name:=ThisWorkbook.linkSources, Type:=xlLinkType.xlLinkTypeExcelLinks

Но я нахожу здесь одну вещь, и я не нахожу никаких документов в Интернете, чтобы объяснить это.Если связанный Excel открыт или сказать, что linkStatus равен xlLinkStatusSourceOpen , приведенный выше код вызовет ошибку времени выполнения: 1004, «Ошибка метода UpdateLink объекта _Workbook» Вы можете легко повторить ошибку, я думаю.И если вы вручную перейдете на вкладку «Данные» на ленте Excel, нажмите «Изменить ссылки», затем нажмите «Обновить значения».Все в порядке.Несоответствие поведения VBA и поведения операций Excel, выполняемых вручную, странно.Кто-нибудь знает почему?Спасибо

1 Ответ

0 голосов
/ 07 декабря 2018

Если исходная рабочая книга открыта, то

Application.Calculate

выполнит эту работу за вас!


Или технически более длинный код для понимания и решения проблемы будет ниже:

Public Function IsWorkbookOpen(sFileName) As Boolean
    On Error Resume Next
    Open sFileName For Binary Access Read Lock Read As #1
    Close #1
    FileInUse = IIf(Err.Number > 0, True, False)
    On Error GoTo 0
End Function


Sub Update_Links()
    Dim wbkPath As String

    'Update formulas/links for all the open source workbooks
    Application.Calculate
    For Each wbkPath In ThisWorkbook.LinkSources
        'Update formulas/links for all the closed source workbooks
        If Not IsWorkbookOpen(wbkPath) Then
            ThisWorkbook.UpdateLink Name:=ThisWorkbook.LinkSources, Type:=XlLinkType.xlLinkTypeExcelLinks
            Exit For
        End If
    Next

End Sub
...