我正在尝试创建一个 MSI 安装程序,将加载项 (.xla) 安装到 Microsoft Excel(我的例子是 2007)中。安装很顺利。我使用运行此 VBScript 文件的“自定义操作”:
Dim SourceDir
Dim objExcel
Dim objAddin
SourceDir = Session.Property("CustomActionData")
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add
Set objAddin = objExcel.AddIns.Add(SourceDir & "addin.xla", True)
objAddin.Installed = True
objExcel.Quit
Set objExcel = Nothing
我使用 CustomActionData 属性将插件的位置传递给脚本。该加载项将被复制到“Program Files”内的文件夹中,并将一直保留在该文件夹中直至被卸载。这是由安装程序本身处理的。
问题是当我使用卸载脚本时:
Dim objExcel
Dim addin
On Error Resume Next
Set objExcel = CreateObject("Excel.Application")
For i = 0 To objExcel.Addins.Count
Set objAddin= objExcel.Addins.item(i)
If objAddin.Name = "addin.xla" Then
objAddin.Installed = False
End If
Next
objExcel.Quit
Set objExcel = Nothing
插件在安装的 Excel 中创建自定义工具栏。卸载时工具栏不会被删除,Excel 设置的“加载项”部分中的加载项条目也不会被删除。
谁能告诉我这两件事是否可以使用 VBScript 以编程方式完成?
提前致谢
最佳答案
VB(A) 中几乎所有集合都是从 1 开始的。您的循环从零开始,因此当它尝试访问 AddIns(0)
时会失败。这被您的On Error Resume Next
这一事实所掩盖。
此外,您还需要明确删除工具栏。仅仅删除加载项并不能做到这一点。
我不能说我喜欢你这样做的方式,但它应该至少在 50% 的时间内有效:-)
关于excel - 使用 VBScript 卸载 Excel 加载项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1130301/