【问题标题】:How to send in a callback object from .net to custom Word macro如何将回调对象从 .net 发送到自定义 Word 宏
【发布时间】:2013-10-18 04:35:12
【问题描述】:

我有一些 VB.net 代码和一个自定义 Microsoft Word VBA 宏。我正在尝试将 VB.net 实例传递到宏中,以便我可以从宏中对该对象运行函数。我似乎无法将 VB.net 代码中的对象传递给宏。

警告,我是 VB 和 Word marcos 的新手。感谢您的所有帮助!

我使用 C#.net 代码创建 word doc 并将其传递给 VB.net 代码

 private void BtnStartWord_Click(object sender, EventArgs e)
    {

        Microsoft.Office.Interop.Word.Application wdApp = new Microsoft.Office.Interop.Word.Application();
        wdApp.Documents.Add(@"C:\template.dotm");
        wdApp.Visible = true;

        VBWord.Word wordVB = new VBWord.Word();

        wordVB.Connect(Handle.ToInt32(), wdApp);
    }

VB.net 代码

Public Class Word
    Public Sub Connect(ByVal plWinHandle As Long, _
                       ByVal pobjDocHandle As Object)

        RunMacro(pobjDocHandle, New Object() {"Connect", plWinHandle, Me})
    End Sub
    Private Sub RunMacro(ByVal oApp As Object, ByVal oRunArgs() As Object)
        oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default Or System.Reflection.BindingFlags.InvokeMethod, Nothing, oApp, oRunArgs)
    End Sub
End Class

而且,在我的 Word 模板中,我有一些代码。代码在 TemplateProjects -> Microsoft Word Objects -> ThisDocument 中,如下所示。

Option Explicit

Public Sub Connect(ByVal plWindow As Long, ByRef pobjControl As Object)
    Set goApp.App = Word.Application
    goApp.WindowHandle = plWindow
    goApp.ControlHandle = pobjControl
End Sub

上面的 goApp 在 Modules -> Globals 中定义

Option Explicit
Public goApp As New WordApp

目前,VB 代码在上面的 oApp.GetType().InvokeMember 行上抛出错误。我不认为它喜欢我被传递到它的论点。但是,我不知道如何通过自身。

抛出的错误是

Message = "Exception has been thrown by the target of an invocation."
InnerException = {"Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"}

而且,我最终希望能够在 Word 中使用宏来回调 VB 代码中的函数。类似于以下内容。

Sub ApproveButton(ByVal control As IRibbonControl)
    '-----------------------------------------------------------------------------
    ' Description: This procedure sends the Approve action request back to the VB code
    '-----------------------------------------------------------------------------
    goApp.SendAction "Approve"
End Sub

【问题讨论】:

    标签: .net vb.net vba ms-word


    【解决方案1】:

    在不知道异常的情况下很难诊断。我推荐使用以下标准方法之一从 VBA 调用 .NET 代码:

    1. 创建一个 COM 可见的 .NET DLL,在 VBA 中添加对它的引用,然后从 VBA 实例化您的“Word”类。请参阅 this questionthis blog post
    2. 使用VSTO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-07
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多