我面临着一个非常奇怪的VBA代码问题。我有一个excel文件,它使用Addin中的UDF。这个文件在服务器上运行,所以我真的不可能看到代码中实际发生了什么。现在,每当我在文件中(在我的本地机器上)进行任何更改时,我都会使用本地版本的插件。因此,当替换服务器上的文件时,我需要它自动更改指向服务器上的插件副本的链接。为此,我在文件中有这段代码:
Private Sub changeLinks(addinName As String, wb As Workbook)
Dim check As Long
Dim i As Long
Dim existingPath As String
Dim correctPath As String
Dim temp As Variant
Dim tempA As Variant
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Application.ScreenUpdating = False
temp = getLinks(addinName, wb)
On Error Resume Next
correctPath = Application.AddIns(addinName).fullName
For i = 1 To 100
If temp(i) = "" Then Exit For
If UCase(temp(i)) <> UCase(correctPath) Then
wb.ChangeLink temp(i), correctPath, xlLinkTypeExcelLinks
End If
Next
On Error GoTo 0
End Sub
Private Function getLinks(addinName As String, wb As Workbook)
Dim allLinks As Variant
Dim check As Long
Dim i As Long
Dim temp(1 To 100) As Variant
Dim linkCounts As Long
check = 0
allLinks = wb.LinkSources
linkCounts = 0
On Error Resume Next
For i = LBound(allLinks) To UBound(allLinks)
check = InStr(1, UCase(allLinks(i)), UCase(addinName))
If check <> 0 Then
linkCounts = linkCounts + 1
temp(linkCounts) = allLinks(i)
End If
Next
On Error GoTo 0
getLinks = temp
End Function
尽管所有语句如Application.DisplayAlerts = False和On Error Resume Next,代码仍然挂在我使用.ChangeLink方法的行上。奇怪的是,如果我登录到服务器并手动运行,代码就可以正常运行。我相信这是由于代码试图运行.ChangeLink语句时出现的一些弹出窗口。我看不出这个弹出窗口是什么,因为它在服务器上以不同的登录方式运行。所以现在我只是把头撞到了墙上。
感谢任何帮助。