问题摘要: 为什么我从程序菜单启动Excel时加载以编程方式安装的加载项,但在打开安装它们的Installer.xlsm工作簿时加载?
详细信息: 我的团队开发了组织中各种用户使用的加载项层次结构。 我有一个Installer.xlsm文件,它为每个加载项安装新版本。它有一个Workbook_Open方法,在打开工作簿时卸载当前安装的加载项版本并安装它们的新版本。
这种工作效果超过一年。最近我们更新了加载项的层次结构,从那时起,相同的脚本将成功运行,卸载旧的加载项并安装新的加载项。但是,当重新打开Excel时(从程序菜单或现有工作簿),似乎脚本根本没有任何效果 - 在运行之前安装的加载项仍然安装并且新的加载项甚至没有列出在“管理加载项”窗体中。这也反映在HKCU\...\Excel\Add-in Manager
中 - 加载项列表与运行前的列表相同。
但是,如果我再次打开Installer.xlsm - 它只加载加载项我希望它在成功运行脚本后加载(加载新安装的加载项并且不加载脚本已卸载)!好像加载项安装在单个.xlsm
文件的范围内...
注意:
加载项不会放在Excel的加载项目录中,而是放在项目文件夹中(C:\ appname \ Addins \ date)。
我在Windows 7上使用Excel 2010并在我的计算机上拥有管理员权限。
HKCU\...\Excel\Add-in Manager
下正确注册。请帮助解决这个谜团!
执行卸载的代码部分:
For Each ad In Application.AddIns
For Each appName In pAppNames
If pIniMap.item("FilePrefix").Exists(appName) Then
filePrefix = pIniMap.item("FilePrefix").item(appName)
If Left(ad.Name, Len(filePrefix)) = filePrefix Then
If ad.Installed Then
ad.Installed = False
Workbooks(ad.Name).Close False
End If
End If
Else
logger.Warn "Entry is missing for section FilePrefix, appName=" & appName, methodName
End If
Next appName
Next ad
执行加载项安装的代码部分:
For Each file In addinFiles
curAddInPath = pAddinDir & file
With Application.AddIns.Add(fileName:=curAddInPath)
.Installed = True
End With
Next file
答案 0 :(得分:0)
可能是您从默认目录而不是您指定的自定义目录中添加的。我在安装代码中添加了以下参数。希望它会有所帮助。
For Each file In addinFiles
curAddInPath = pAddinDir & file
With Application.AddIns.Add(fileName:=curAddInPath, CopyFile:=False) 'add false to args if addin is not coming from default directory
.Installed = True
End With
Next file