2013-10-17 16 views
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 

回答

0

不知道例外情況很難診斷。我建議這些標準方法之一從VBA調用.NET代碼:

  1. 創建一個COM可見的.NET的DLL,添加引用它在VBA,然後實例從VBA你的「字」級。見this questionthis blog post
  2. 使用VSTO
相關問題