【发布时间】: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
【问题讨论】: