tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルEXCELのバージョン
記事No4460
投稿日: 2006/10/27(Fri) 01:44
投稿者colab
いつも参考にさせて頂いています。さて、EXCELの利用について質問させてください。
とても初歩的なことなのですが、開発マシンはXP(SP2)+EXCEL2003なので
Microsoft Excel 11.0 ObjectLibrary を参照しています。
開発マシン上でインストールしても正常にEXCELが立ち上がることを確認してから
他のマシン(XP SP2+EXCEL2000)で検証したところエラーとなりEXCELが立ち上がりません。
これはExcelのバージョンによる違いのせいでしょうか?
よろしくお願いします。

[ツリー表示へ]
タイトルRe: EXCELのバージョン
記事No4462
投稿日: 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)を困難にするなどといった、別の問題を生じさせます。

[ツリー表示へ]
タイトルお礼
記事No4482
投稿日: 2006/10/29(Sun) 16:07
投稿者colab
お礼が遅れて申し訳有りませんでした。とても解りやすい説明を頂き感謝いたします。
当面は、自分の環境また、一緒に使う方の環境を合わせることができるのでEXCEL2003
に限定させることにしました。時間を見てバージョン毎への対応も検討してみます。
その節にはまたご厄介になることもあるかと思います。どうぞ宜しくお願いいたします。

[ツリー表示へ]