いくつかの VB.net コードとカスタム Microsoft Word VBA マクロがあります。マクロからそのオブジェクトに対して関数を実行できるように、VB.net インスタンスをマクロに渡そうとしています。オブジェクトを VB.net コードからマクロに渡すことができないようです。
警告、私は VB と Word のマルコスが初めてです。助けてくれてありがとう!
docという単語を作成してVB.netコードに渡すために使用するC#.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 行でエラーをスローしています。Me が渡されるという引数が気に入らないと思います。しかし、私はそれ自体を渡す方法がわかりません。
スローされるエラーは
Message = "Exception has been thrown by the target of an invocation."
InnerException = {"Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"}
そして、私が最終的にできるようにしたいのは、VB コードの関数をコールバックする Word のマクロです。次のようなもの。
Sub ApproveButton(ByVal control As IRibbonControl)
'-----------------------------------------------------------------------------
' Description: This procedure sends the Approve action request back to the VB code
'-----------------------------------------------------------------------------
goApp.SendAction "Approve"
End Sub