タイトル : Re: EXCELのバージョン 投稿日 : 2006/10/27(Fri) 10:13 投稿者 : 魔界の仮面弁士
> これはExcelのバージョンによる違いのせいでしょうか? そのとおりです。 可能であれば、一つのアセンブリで複数バージョンに対応させようとするのではなく、 各バージョンごとにアセンブリを作り分ける事を検討してみてください。 Excel はバージョンが上がると、Sub だったメソッドが Function になっていたり、 同じメソッド名でも、省略可能な引数が増えたり、あるいは列挙型にあらたな値が 追加されていたりします。 どうしても一つのアセンブリにしたいなら、各バージョンのメソッド定義を比較調査してください。 たとえば、Worksheets.Open メソッドによる oBook = oWorkbooks.Open(filePath) といったコードをアーリーバインドで書いた場合、このコードは、 (a) 97 または 2000 を参照設定しているなら、97/2000/2002/2003 のいずれでも動作。 (b) 2002 または 2003 を参照設定しているなら、97/2000 では NG。2002/2003はOK。 という事になります。また、このコードを書き換えて、 oBook = oApp.Workbooks._Open(filePath) のように書くと、 (c) 97 または 2000 を参照設定している場合、これはコンパイルエラー。 (d) 2002 または 2003 を参照設定している場合、97/2000/2002/2003 のいずれでも動作。 という事になります。(この _Open は互換性維持目的の隠しメソッドです) あるいは、OpenText メソッドであれば… oWorkbooks.OpenText(filePath) ------------ (A) 97 を参照設定している場合、97/2000/2002/2003 のいずれでも動作。 (B) 2000 を参照設定している場合、97 環境ではNG、2000/2002/2003 では動作。 (C) 2002 または 2003 を参照設定している場合、97/2000 で NG、2002/2003 ならOK。 oWorkbooks._OpenText(filePath) ------------ (D) 97 を参照設定している場合、これはコンパイルエラー。 (E) 2000 を参照設定している場合、97/2000/2002/2003 のいずれでも動作。 (F) 2002 または 2003 を参照設定している場合、97/2000 で NG、2002/2003 ならOK。 oWorkbooks.__OpenText(filePath) ------------ (G) 97/2000 を参照設定している場合、これはコンパイルエラー。 (H) 2002 または 2003 を参照設定している場合、97/2000/2002/2003 のいずれでも動作。 といった結果を生みます。 ただしメソッドによっては、こうした互換メソッドが用意されていないものもありますので、 その場合は、別のメソッドなどで代替する事を検討せねばなりません。 なお VB6 の頃は、これをレイトバインドで書くことで、バージョン互換性をある程度 維持できたのですが、VB.NET の場合は、レイトバインド主体のコーディングは、 メモリ破棄(Marshal.ReleaseComObject)を困難にするなどといった、別の問題を生じさせます。 |