[リストへもどる]
一括表示

投稿時間:2004/01/23(Fri) 17:10
投稿者名:hey
URL :
タイトル:
Excel 事前バインディングとバージョン依存
hey と申します。
Excel操作のための事前バインディングとバージョン依存 について
質問させて下さい。

開発環境は Windows2000 + VB6(SP5) + Excel2000 です。

こちらのサイトのサンプルを参考にさせていただきExcelデータを
読み込みフォーム上のグリッドに表示するプログラムを作りました。

Web上でいろいろ調べてみましたところ、
「配布先のExcelのバージョンに依存しないプログラムにするには
  Dim xlApp As Object
 として事後バインディングする必要がある」
 というコメントをいくつか発見しました。

これはてっきり開発環境と同じバージョンのExcelがないと動かない、
という意味なのだろうと思いましたが念のため、そのプログラムを
他の2種類の環境で試してみたところ、思いの外、問題なく動作しました。


インストール先テスト環境:Windows98 + Excel97
                  WindowsXP + Excel2002

さて、これはどのように解釈すればよろしいのでしょうか?
Excelのバージョンに依存した動作でなく、単純なデータ参照程度なら
問題ないということなのでしょうか?

---------------以下がコードの一部です--------------------

'参照設定で Microsoft Excel 9.0 Oblect Library を指定

Private Sub ReadExcel()
  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  'ここで既存のExcelファイル上のデータをMSHFlexGrid上のセルにコピー
  '(省略)

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

--------------------------------
宜しくお願いします。

投稿時間:2004/01/24(Sat) 05:41
投稿者名:よねKEN
Eメール:
URL :
タイトル:
Re: Excel 事前バインディングとバージョン依存
> Web上でいろいろ調べてみましたところ、
> 「配布先のExcelのバージョンに依存しないプログラムにするには
>   Dim xlApp As Object
>  として事後バインディングする必要がある」
>  というコメントをいくつか発見しました。

私も何度かこういう回答をしたことがありますね(^^;
ExcelもActiveX EXEなので、バイナリ互換が保たれている限りは、
参照設定していても利用できるはずです。(理屈としては)

> これはてっきり開発環境と同じバージョンのExcelがないと動かない、
> という意味なのだろうと思いましたが念のため、そのプログラムを
> 他の2種類の環境で試してみたところ、思いの外、問題なく動作しました。
>
>
> インストール先テスト環境:Windows98 + Excel97
>                   WindowsXP + Excel2002
>
> さて、これはどのように解釈すればよろしいのでしょうか?
> Excelのバージョンに依存した動作でなく、単純なデータ参照程度なら
> 問題ないということなのでしょうか?

今回は、

> '参照設定で Microsoft Excel 9.0 Oblect Library を指定

とあって、Excel97の参照設定がされているので、
Excel97以上でバイナリ互換が保たれていれば動作はすると思います。
#バージョン間で各オブジェクトのメソッドなどの内部動作が
#変わっていれば、動作結果は異なるかもしませんが、
#これはアーリーバインドでやるか、レイトバインドやるかとは無関係ですね。

投稿時間:2004/01/24(Sat) 08:54
投稿者名:hey
URL :
タイトル:
Re2:Excel 事前バインディングとバージョン依存
ありがとうございます。

> ExcelもActiveX EXEなので、バイナリ互換が保たれている限りは、
> 参照設定していても利用できるはずです。(理屈としては)

つまり Excelプログラム自体の バージョン間の互換性の問題だということですね。

ということは
「Excelがインストールされていること」を動作条件にプログラムを配布するのは
危険ですね。バージョンごとにテストして指定したいと思います。
Excel95 が棚の奥から出てきましたのでテストしてご報告いたします。

> 今回は、
> > > '参照設定で Microsoft Excel 9.0 Object Library を指定
> > とあって、Excel97の参照設定がされているので、
> Excel97以上でバイナリ互換が保たれていれば動作はすると思います。

Microsoft Excel 9.0 Object Library は Excel2000 に対応しているんですよね。
今回 Excel97 でも正常動作していますので 上位互換 というわけでもないとい
うことでしょうか。

投稿時間:2004/01/25(Sun) 08:38
投稿者名:hey
URL :
タイトル:
Re3:Excel 事前バインディングとバージョン依存
報告いたします。

前述のコードを下記の環境でテストしてみました。

Windows98 + Excel95
Windows95 + Excel95

結果は2環境とも

エラー番号 13「型が一致しません」 が発生しました。

やはり Excel 自体のバージョン間 互換の問題ですね。

作成したプログラムではさほど読み取りに時間差がありませんでしたので
よねKENさんがおっしゃるように事後バインディングに変更いたしました。

どうもありがとうございました。