我可以通过将工作簿的 .IsAddin 属性设置为True并将其保存为* xlam格式来创建代码加载项。
然后我可以将其添加为对任何其他工作簿的引用,例如:
Sub Test()
Dim wb As Workbook
Set wb = Workbooks.Add
wb.VBProject.References.AddFromFile "PathToAddIn.xlam"
End Sub
然后可以从主wb工作簿中调用外接程序的代码过程。
但是,如果在外接程序中运行过程时,我想获得引用外接程序的工作簿的工作簿对象,
例如,如下所示:
Sub ThisProcedureIsWithinTheAddIn()
Debug.Print ThisWorkbook.Path ' Returns the path of this add-in (xlam) file
Dim ReferringWorkbook As Workbook
Set ReferringWorkbook = ThisWorkbook... ' How does one reference the caller/referrer?
End Sub
出于这个问题的目的,假定代码执行在一个完全独立的线程中,并且wb对象(最初创建的)不再作为变量存在。实际上,在我的应用程序中,wb是在完全独立的 New Excel.Application 中创建的。
我意识到我可以使用 For Application.Workbooks 中的每个wb浏览应用程序中的每个工作簿,并找到一些相关的匹配条件。但这是一个混乱的解决方案。还有更优雅的东西吗?