1

IDE 插件是在 VB6 中创建的,适用于 VB6、Excel、Access 等。
查看Application&AddInInst参数,传递给初始过程:

Private Sub AddinInstance_OnConnection( _
    ByVal Application As Object, _ 
    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    ByVal AddInInst As Object, _
    custom() As Variant) 

我找不到任何明确的主机值。我在哪里可以获得对主机的参考?
.

4

1 回答 1

2

主机没有被 VBIDE 对象模型显式公开,但是有许多方法可以获取对主机的引用:

  1. 检查 vbProject 的引用。宿主参考通常是项目的第二参考。一旦您知道引用的名称,您就可以构建一个字符串以用于GetObject. 问题是,如果没有加载 VBProject,或者项目受到保护,则此方法将不起作用。

  2. 检查 VBE 的标准命令栏中第一个按钮的标题,在 Excel 的情况下是“查看 Microsoft Excel (Alt+F11)”。一旦您知道主机的名称,您就可以构建一个字符串以用于GetObject

  3. 使用Properties collection of a vbComponent such asThisWorkbook` 返回对应用程序的引用。此方法仅在项目具有文档类型 vbComponent 时才有效。PowerPoint 和 Access 等主机不一定具有文档类型组件。这种方法还要求至少有一个项目打开且不受保护:

    Dim app As Excel.Application
    Set app = _vbe.ActiveVBProject.VBComponents("ThisWorkbook").Properties("Parent").Object
    
  4. 使用 Accessibility ( GetAccessibleObject) 从 VBE 的 ProcessID 获取主机句柄(您可以从 VBE 的 Hwnd 获取)。有关更多详细信息,请参阅下面的问题链接。

Rubberduck 不得不为 VBE 的 C# 插件中的多个主机做同样的事情。看看GitHub 上的源代码,这里还有这个相关的问题

于 2016-08-22T23:36:12.190 回答