Tam*_*viv 6 excel vba excel-vba excel-addins
问题摘要: 为什么我从程序菜单启动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
Run Code Online (Sandbox Code Playgroud)
执行加载项安装的代码部分:
For Each file In addinFiles
curAddInPath = pAddinDir & file
With Application.AddIns.Add(fileName:=curAddInPath)
.Installed = True
End With
Next file
Run Code Online (Sandbox Code Playgroud)
您可能是从默认目录而不是您指定的自定义目录添加的。我在您的安装代码中添加了下面的参数。希望它有帮助。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |