|
2008/10/30(Thu) 13:34:35 編集(投稿者)
■No27196 (キツネリス さん) に返信 > 本来ならソース元の管理者の方に問い合わせてみるのが良いのかもしれませんが 元ソースの開発環境に入っていた Excel のバージョンと、 現在開発中の環境内に入っている Excel のバージョンと、 実行予定となるインストール先の Excel のバージョンが、 正しく一致していることを確認してみてください。
Excel のタイプライブラリは、十分なバイナリ互換性を保っていないので、 事前バインディングによる開発だと、バージョンの違いを吸収しきれない事があります。
たとえば同じ名前のメソッドでも、バージョンが上がると引数の数が増やされたり、 戻り値が無い(void)メソッドが、次のバージョンから object を返す場合があったりするため、 それが原因で、コンパイルが通らなくなったり、実行時の動作に影響を与えたりします。 (上位バージョンには、下位バージョン用のインターフェイスも実装されているのですが、完全ではない模様)
> 追加情報 : インターフェイス Excel._Application の QueryInterface に失敗しました。 COM 側での型変換に失敗しているようですね。
ただ、これだけでは何とも言えません。上記に書いたように、環境側(バージョンの違い等)に 問題があるという可能性もありますが、単に、記述したソースコードに問題があるだけかも 知れませんし。もう少し情報が欲しい所です。
-- 追記 -- それともう一つ。.NET Framework 、および Visual Studio の Service Pack も 確認しておいてください。少なくとも .NET 1.1 の頃において、省略可能な引数を持った 'VBA/VB6 的表現 Property Get Foo(ByVal a As Long, Optional ByVal b As Long) As Long Property Let Foo(ByVal a As Long, Optional ByVal b As Long, ByVal c As Long) のようなプロパティを持つ ActiveX コンポーネントを参照設定した場合、 Service Pack の有無によって、自動生成されるタイプライブラリの定義が変化してしまい、 'Service Pack 無しの場合 Sub set_Foo(ByVal a As Integer, ByVal b As Integer) Function get_Foo(ByVal a As Integer) As Integer および 'Service Pack 1 適用済みの場合 Sub set_Foo(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer) Sub set_Foo(ByVal a As Integer, ByVal c As Integer) Function get_Foo(ByVal a As Integer) As Integer Function get_Foo(ByVal a As Integer, ByVal b As Integer) As Integer になる場合とがあったようです。(人から聞いただけで、私自身は未検証ですが)
Excel の場合、省略可能な引数が多いので、もしかしたら…と。
|