Excel 加载项安装在初始安装时出现下标超出范围错误
Excel add-in install gives a subscript out of range error on initial install
我有一些代码,当工作簿打开时,检查是否有加载项,并根据情况从 onedrive 下载副本。
我的问题是,在最初的 运行 中,它在最后一个加载项安装行上出现下标超出范围的错误。如果用户关闭 excel 并重新打开,则安装没有问题。陌生人,如果我让他们从加载项文件夹中删除加载项,当他们打开工作簿时它仍然可以正常安装。它始终是初始的 运行 标记错误。现在我一直在放置一个错误处理程序,指示他们在初始安装错误触发时重新打开 excel。有什么想法吗?
sUserName = Environ("username")
sSourceAddInPath = "C:\Users\" & sUserName & "\xxxxxxxxxx\Excel\MyAddIn.xlam"
sDestinationAddInPath = Application.UserLibraryPath & "MyAddin.xlam"
'Add-in exists
If Dir(sDestinationAddInPath) <> "" Then
'Update if newer version available
If FileDateTime(sSourceAddInPath) > FileDateTime(sDestinationAddInPath) Then
FileCopy sSourceAddInPath, sDestinationAddInPath
End If
'No Add-in
Else
FileCopy sSourceAddInPath, sDestinationAddInPath
End If
AddIns("MyAddIn").Installed = True
我通过更改代码并使用 Add 方法解决了它。
Addins.Add sSourceAddInPath
从测试来看,我似乎不需要在本地测试和复制加载项文件。 Add 方法将创建一个注册表项,该注册表项链接到存储在用户本地 onedrive 文件夹中的加载项,该文件夹还链接到共享点站点。这样,当我在 sharepoint 上更新文件时,它会更新他们的 onedrive 版本。
我还添加了一个存储在打开工作簿中的辅助函数来测试加载项是否已加载(即在加载项列表中),这样就不必在每次打开工作簿时都调用 Add .老实说,不确定这是否重要。
Function AddInIsLoaded(sAddInName as String) As Boolean
Dim aiAddIn as AddIn
Dim bLoaded as Boolean
bLoaded = False
On Error Resume Next
'Will error if add-in not loaded
Set aiAddIn = AddIns(sAddInName)
If Err.Number = 0 Then
bLoaded = True
End If
AddInIsLoaded = bLoaded
End Function
更新代码:
sUserName = Environ("username")
sSourceAddInPath = "C:\Users\" & sUserName & "\xxxxxxxxxx\Excel\TheAddIn.xlam"
If Not AddInIsLoaded("TheAddInName") Then
AddIns.Add sSourceAddInPath
End If
AddIns("TheAddInName").Installed = True
我有一些代码,当工作簿打开时,检查是否有加载项,并根据情况从 onedrive 下载副本。
我的问题是,在最初的 运行 中,它在最后一个加载项安装行上出现下标超出范围的错误。如果用户关闭 excel 并重新打开,则安装没有问题。陌生人,如果我让他们从加载项文件夹中删除加载项,当他们打开工作簿时它仍然可以正常安装。它始终是初始的 运行 标记错误。现在我一直在放置一个错误处理程序,指示他们在初始安装错误触发时重新打开 excel。有什么想法吗?
sUserName = Environ("username")
sSourceAddInPath = "C:\Users\" & sUserName & "\xxxxxxxxxx\Excel\MyAddIn.xlam"
sDestinationAddInPath = Application.UserLibraryPath & "MyAddin.xlam"
'Add-in exists
If Dir(sDestinationAddInPath) <> "" Then
'Update if newer version available
If FileDateTime(sSourceAddInPath) > FileDateTime(sDestinationAddInPath) Then
FileCopy sSourceAddInPath, sDestinationAddInPath
End If
'No Add-in
Else
FileCopy sSourceAddInPath, sDestinationAddInPath
End If
AddIns("MyAddIn").Installed = True
我通过更改代码并使用 Add 方法解决了它。
Addins.Add sSourceAddInPath
从测试来看,我似乎不需要在本地测试和复制加载项文件。 Add 方法将创建一个注册表项,该注册表项链接到存储在用户本地 onedrive 文件夹中的加载项,该文件夹还链接到共享点站点。这样,当我在 sharepoint 上更新文件时,它会更新他们的 onedrive 版本。
我还添加了一个存储在打开工作簿中的辅助函数来测试加载项是否已加载(即在加载项列表中),这样就不必在每次打开工作簿时都调用 Add .老实说,不确定这是否重要。
Function AddInIsLoaded(sAddInName as String) As Boolean
Dim aiAddIn as AddIn
Dim bLoaded as Boolean
bLoaded = False
On Error Resume Next
'Will error if add-in not loaded
Set aiAddIn = AddIns(sAddInName)
If Err.Number = 0 Then
bLoaded = True
End If
AddInIsLoaded = bLoaded
End Function
更新代码:
sUserName = Environ("username")
sSourceAddInPath = "C:\Users\" & sUserName & "\xxxxxxxxxx\Excel\TheAddIn.xlam"
If Not AddInIsLoaded("TheAddInName") Then
AddIns.Add sSourceAddInPath
End If
AddIns("TheAddInName").Installed = True