【问题标题】:Calling a third-party public ComVisible .Net method from VBA从 VBA 调用第三方公共 ComVisible .Net 方法
【发布时间】:2012-06-10 00:33:30
【问题描述】:

我需要从第三方 .Net 程序集调用一个方法。我想要的对象是公共的,并标有 ComVisible 属性。我想要的方法是公开的,但需要一个 IRibbonControl 。所以:

[ComVisible(true)]
public class CustomUI : IRibbonExtensibility

.. ..

public void SaveAs(IRibbonControl control);

这可能吗,例如通过 VBA 中的 CreateObject?我需要在 VBA 中创建一个 IRibbonControl,对吗?

【问题讨论】:

    标签: .net com


    【解决方案1】:

    我知道这并不能直接回答您的问题,但是如果您使用 DispIds 设置您的界面并正确地重新充气,您“应该”能够在 VBA 中使用它。我通常在机器上使用 VBScript 测试来测试我的 COM 暴露对象。

    Handling VB.NET events in VB6 code

    显然这是 VB.NET 代码,但属性等只是 C# 的格式略有不同。 (如果您在这方面需要更多帮助,请告诉我)

    您能否在注册表中正确查看对象注册(搜索对 dll 的引用或查找它的类名)。

    确保您使用regasm "path to dll" /codebase /tlb 注册 DLL 如果您不注册 TLB,我认为 VBA 将无法找到该对象。

    从 VBScript 尝试set myobj = CreateObject("FULLREFERENCE.CLASSNAME"),您需要进行试验,直到获得确切的名称。

    然后在您的 VBA 代码中,根据您的注册方式添加对 tlb/dll 的引用。

    【讨论】:

    • 不是我的界面,是第三方的。 (我刚刚在我的问题描述中编辑了这个)
    【解决方案2】:
    Dim var As Office.IRibbonControl
    Set var = New Office.IRibbonControl
    

    将创建一个 IRibbonControl 对象

    你可能想看:http://www.xtremevbtalk.com/showthread.php?t=265636&highlight=iribboncontrol

    【讨论】:

    • 如果我需要添加一个引用,你能告诉我它叫什么吗?您按原样发布的代码将无法编译:“Invalid use of New keyword”
    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2013-11-26
    • 2015-08-26
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多