1
我有一些VB.net代碼和一個自定義的Microsoft Word VBA宏。我試圖將VB.net實例傳遞給宏,以便我可以從宏中對該對象運行函數。我似乎無法將對象從VB.net代碼傳遞到宏。如何將.net中的回調對象發送到自定義Word宏
警告,我是全新的VB和Word馬科斯。感謝您的幫助!
C#.NET代碼,我用它來創建的Word文檔,並把它傳遞給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對象 - > 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 - >全局
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