tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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)を困難にするなどといった、別の問題を生じさせます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。