如果打开空白的Excel电子表格,请打开VBA编辑器,然后运行以下命令:
Sub x()
For Each a In AddIns()
Debug.Print a.Title & " : " & a.Name
Next
End Sub
我得到以下输出:
Analysis ToolPak : ANALYS32.XLL
Analysis ToolPak - VBA : ATPVBAEN.XLAM
Euro Currency Tools : EUROTOOL.XLAM
Solver Add-in : SOLVER.XLAM
但是,如果我随后转到“文件”>“选项”>“加载项”,则会看到更长的加载项列表:
Analysis ToolPak : ANALYS32.XLL
Analysis ToolPak - VBA : ATPVBAEN.XLAM
Date (XML) : MOFL.DLL
Euro Currency Tools : EUROTOOL.XLAM
Microsoft Power Map for Excel : EXCELPLUGINSHELL.DLL
Solver Add-in : SOLVER.XLAM
MyAddinFoo : Foo.DLL
为什么会这样?为什么AddIns()
只检测到插件的一个子集?
为了避免出现XY问题,请允许我描述一下我要做什么:我有一个提供电子表格功能的加载项(MyAddinFoo
)。
我正在尝试使用VB脚本自动执行电子表格,该脚本将Excel作为OLE对象调用并在电子表格上运行VBA宏。我已经有一个脚本可以做到这一点:
'test.vbs
Set objExcel = CreateObject("Excel.Application")
objExcel.Application.Run "'foo.xlsm'!Module1.FooMacro"
objExcel.DisplayAlerts = False
objExcel.Application.Quit
Set objExcel = Nothing
我唯一的问题是电子表格依赖于此加载项。当Excel作为OLE对象运行时,必须手动激活加载项。但是,由于Addins()
找不到我的加载项,因此无法在脚本中使用AddIns("MyAddinFoo").Installed = True
来激活它。
因此,换句话说,AddIns()
未找到加载项时,如何通过VB脚本激活加载项?
编辑:@BigBen对COMAddins()
发表评论后,我可以确认它确实找到了缺少的加载项,包括我的。
但是,我看不到如何使用它,因为脚本说该外接程序已经连接:
'test.vbs
Set objExcel = CreateObject("Excel.Application")
Wscript.Echo objExcel.Application.COMAddIns("MyAddinFoo.Connect").Connect
Set objExcel = Nothing
这将输出-1
(True
的整数表示形式。
因此,如果外接程序已经连接,我不知道要通过脚本在电子表格上对其进行实际操作还有什么其他方法。