Excelの相互運用で問題が発生しています。基本的に、私がやろうとしているのは、複雑な引数タイプを使用して.NETからExcelブックのマクロを呼び出すことです。ただし、そうすることで、ApplicationとApplicationClassの間にいくつかの違いが生じ、頭痛の種になります。
ここにいくつかのコードがあります:
Dim complexType As New BigBadClass
Dim result As Boolean = importerClass.ExcelApplication.ComObject.GetType().InvokeMember("Run", _
Reflection.BindingFlags.Default + Reflection.BindingFlags.InvokeMethod, Nothing, _
importerClass.ExcelApplication.ComObject, _
New Object() {"TheMacroName", AStringValue, ALongValue, complexType})
エクセルVBAマクロでは、complexTypeはオブジェクトにマップされます。
(興味深いことに、私は最初にこれをC#で試し、Type Mismatch例外を取得し続けました。これと、C#コードの唯一の違いは、これがVB.NETで作成されたcomplexTypeで渡され、C#バージョンがで作成されたcomplexTypeで渡されることです。 C#。まだ理解していない何らかの理由で(オブジェクトタイプの微妙な違いはありますか?)、C#は失敗しますが、VB.NETは機能します)
とにかく、上記のコードスニペットで。これは、ExcelApplication.ComObjectがApplicationClassであり、Applicationインターフェイスではない場合にのみ機能します。アプリケーションにはGetType()メンバーがありません。また、COMクラスであるため、キャストすることはできません。GetObject(..)を使用してユーザー用に開いているブックを自動的にロードする別のピースがあるため、可能であればApplicationを使用したいと思います。これは、ApplicationClassを使用すると機能しなくなります(ここでもCOMクラスをキャストできないため、キャストのみが可能です) GetObject(..)をアプリケーションインターフェイスに)。
誰かが以前にこの問題に遭遇したことがありますか?
ApplicationClassでGetObject(..)のようなものを使用する方法はありますか?
または、アプリケーションでGetType()を使用する方法はありますか?または、COMオブジェクトをキャストする方法はありますか?つまり、ApplicationをApplicationClassにキャストします
うまくいけば、私の説明は十分に明確であり、コードは私がしていることを示しています。