在附加组件我有:
Type Quantity
i As Integer
end type
Sub show_quant(q as Quantiy)
MsgBox(q.i)
end sub
在另一本工作簿中,我这样做:
Sub load_addin()
Dim AI As Excel.AddIn
Set AI = Application.AddIns.Add(Filename:="add_in.xlam")
AI.Installed = True
Dim q As Quantity
show_quant(q)
End Sub
这不起作用。Excel 抱怨用户定义类型尚未定义。
又怎样做您声明了在插件中定义的类型的变量吗?
答案1
我能够使这样的事情发挥作用的唯一方法是按照此页面上的说明进行操作:http://fontstuff.com/vba/vbatut08.htm具体来说,您必须为 vba 项目名称赋予一个新名称,并且需要使用该名称将其添加为引用。网站对此进行了更好的解释。
另一个页面讨论同一件事:从 VBA 调用附加函数
答案2
这对我来说很有用,无需手动添加参考:
Private Sub Workbook_Open()
Dim success As Boolean
Dim myAddIn As AddIn
' Load and install new XLAM
Set myAddIn = AddIns.Add(Filename:=ActiveWorkbook.Path & "\path\to\myAddin.xlam")
myAddIn.Installed = True
' Load known XLAM
For Each myAddIn In AddIns
If myAddIn.Name = "myAddin.xlam" Then
myAddIn.Installed = False
myAddIn.Installed = True
End If
Next
Call AddReference(ActiveWorkbook.Path & "\path\to\myAddin.xlam")
End Sub
我很挣扎,因为 AddIns.Add 需要绝对路径......但它似乎有效!
编辑:我还需要使用和调用:
Sub AddReference(AddInPath As String)
ThisWorkbook.VBProject.References.AddFromFile (AddInPath)
End Sub
来源: https://blogs.msdn.microsoft.com/accelerating_things/2010/09/16/loading-excel-add-ins-at-runtime/