VBA 更新外部 Link 导致 运行 时间错误
VBA Update External Link cause Run Time Error
更新 excel 外部 link 的一个非常简单的 VBA 代码是
ThisWorkbook.UpdateLink Name:=ThisWorkbook.linkSources, Type:=xlLinkType.xlLinkTypeExcelLinks
但是我在这里发现了一件事,而且我没有在网上找到任何文档来解释这一点。如果 linked excel 是打开的,或者说如果 linkStatus 是 xlLinkStatusSourceOpen,上面的代码会导致 运行 time error: 1004, "Method UpdateLink of Object _Workbook failed" 你可以很容易地复制我认为的错误。如果您手动转到 Excel 功能区上的数据选项卡,请单击编辑 links,然后单击更新值。一切都很好。 VBA行为和excel手动操作行为的不一致很奇怪。有人知道为什么吗?谢谢
如果源工作簿已打开,则
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
更新 excel 外部 link 的一个非常简单的 VBA 代码是
ThisWorkbook.UpdateLink Name:=ThisWorkbook.linkSources, Type:=xlLinkType.xlLinkTypeExcelLinks
但是我在这里发现了一件事,而且我没有在网上找到任何文档来解释这一点。如果 linked excel 是打开的,或者说如果 linkStatus 是 xlLinkStatusSourceOpen,上面的代码会导致 运行 time error: 1004, "Method UpdateLink of Object _Workbook failed" 你可以很容易地复制我认为的错误。如果您手动转到 Excel 功能区上的数据选项卡,请单击编辑 links,然后单击更新值。一切都很好。 VBA行为和excel手动操作行为的不一致很奇怪。有人知道为什么吗?谢谢
如果源工作簿已打开,则
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