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

投稿時間:2002/09/11(Wed) 00:48
投稿者名:M
URL :
タイトル:
参照設定について
 ここのページを参考に参照設定でMicrosoft Excel 9.0 Object LibraryにチェックをしてEXCELを
利用したVBプログラムを作成したのですが、exeファイルを作成する際に参照設定のチェックをはずして
作成するとしたらどのようにプログラムを変更していけばよろしいのでしょうか?
---------------------------------------------------------------------------------------
  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)

  xlApp.Visible = True

  xlSheet.Cells(1, 1).Value = "12"
  xlSheet.Cells(2, 1).Value = "34"
  xlSheet.Cells(3, 1).Formula = "=A1+A2" ' "=SUM(A1:A2)"

  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
-------------------------------------------------------------------------------------
上記のサンプルプログラムの場合はどのように変更すればいいのでしょうか? よろしくおねがいします

投稿時間:2002/09/11(Wed) 09:33
投稿者名:A221
Eメール:
URL :
タイトル:
Re: 参照設定について
[VBからエクセルを操作する(その2)]を参考にしましょう

投稿時間:2002/09/11(Wed) 09:38
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 参照設定について
> exeファイルを作成する際に参照設定のチェックをはずして
> 作成するとしたらどのようにプログラムを変更していけばよろしいのでしょうか?

なぜ、参照設定を外さなければならないのでしょうか?
外せばコンパイルできないかと思います(エラーが表示され)し、又、プログラムも
起動しないかと思います。

投稿時間:2002/09/11(Wed) 19:46
投稿者名:M
URL :
タイトル:
Re^2: 参照設定について
A221さん、花ちゃんさん返答ありがとうございます。

A221さん
>[VBからエクセルを操作する(その2)]を参考にしましょう

試してみたんですが、(その2)の方法もやはり(その1)と同様に参照設定が必要なようなので
違う方法があったらよろしくお願いします。

花ちゃんさん
> なぜ、参照設定を外さなければならないのでしょうか?
> 外せばコンパイルできないかと思います(エラーが表示され)し、又、プログラムも
> 起動しないかと思います。

今現在EXCEL9.0.OLBを参照設定しているのですが、参照設定をしているとEXCELのバージョンが
違う場合、同じ関数でも結果が異なる事があると聞いたので、できればどんなEXCELのバージョン
でも動くようにしたいと思い、参照設定をはずしたいと思いました。それともEXCELのバージョン
の違いは気にする必要がないのでしょうか?

VBについてあまり詳しくない者なので色々とご指導お願いします。

投稿時間:2002/09/11(Wed) 20:10
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 参照設定について
> できればどんなEXCELのバージョンでも動くようにしたいと思い

それならバージョンに依存するような関数等は使用しないプログラムを作るしか方法は
ありません。

>参照設定をはずしたいと思いました。

参照設定を外したらプログラムが動きません。
仮に参照設定を外してプログラムが起動したとしてもExcel2000からしかサポートしていない
関数を使ったプログラムを Excel5 上で動作する訳がありません。

投稿時間:2002/09/11(Wed) 23:55
投稿者名:M
URL :
タイトル:
Re^4: 参照設定について
花ちゃんさん、返答ありがとうございます
> それならバージョンに依存するような関数等は使用しないプログラムを作るしか方法は
> ありません。

そうですか〜。。頑張って考えてみます!

> 参照設定を外したらプログラムが動きません。
> 仮に参照設定を外してプログラムが起動したとしてもExcel2000からしかサポートしていない
> 関数を使ったプログラムを Excel5 上で動作する訳がありません。

やっぱり参照設定をはずさないか、バージョンに依存する関数を利用しないかのどちらかですね。
後者について頑張ってみてうまくいかない場合は、参照設定をはずさないでバージョン互換は
諦めます。。 これからのバージョンでも現バージョンでの関数をサポートし続ける事を祈って・・

ところで、今までのExcel関数の下位互換性ってどうだったのでしょうか?確か95と97は色々と
変更があったみたいなのですが、やっぱりちょくちょく互換が失われきてるのでしょうか?

投稿時間:2002/09/12(Thu) 13:21
投稿者名:A221
Eメール:
URL :
タイトル:
Re^3: 参照設定について
もう必要ないかもしれませんが、(読んだのが遅かったですね。)

Option Explicit
Private Const Fname = "c:\test.xls"

Private Sub Form_Load()
Dim xlsOBJ As Object

Set xlsOBJ = GetObject(Fname)
With xlsOBJ
    .worksheets(1).cells(1, 1).Value = "test"
    .worksheets(1).cells(2, 1).Value = "Row=2 Col=1"
    .saveas
    .Close
End With
Set xlsOBJ = Nothing

End Sub

保存は開いた場所ではなく、マイドキュメント等のエクセル標準で保存する
フォルダに落ちます。(フルパス指定すればOKですが。)

投稿時間:2002/09/12(Thu) 20:14
投稿者名:M
URL :
タイトル:
Re^4: 参照設定について
A221さん、返答ありがとうございます!

> もう必要ないかもしれませんが、(読んだのが遅かったですね。)

いえいえ、まだ粘って考えてました!まあ時間はあまり残ってないんですけど・・・
まだまだ必要でした!

> Option Explicit
> Private Const Fname = "c:\test.xls"
>
> Private Sub Form_Load()
> Dim xlsOBJ As Object
>
> Set xlsOBJ = GetObject(Fname)
> With xlsOBJ
>     .worksheets(1).cells(1, 1).Value = "test"
>     .worksheets(1).cells(2, 1).Value = "Row=2 Col=1"
>     .saveas
>     .Close
> End With
> Set xlsOBJ = Nothing
>
> End Sub
>
> 保存は開いた場所ではなく、マイドキュメント等のエクセル標準で保存する
> フォルダに落ちます。(フルパス指定すればOKですが。)

違う方法をありがとうございます。私の環境(VB5 EXCEL2000)でやってみた所ちゃんと
起動してセーブもされるのですが、そのご作成したファイルを開いてもシートすら表示
されないです。。
でも手がかりが見つかったような気がするので色々と時間があれば思考錯誤していきたいと
思います。
また何かありましたらよろしくお願いします!! ありがとうございました!

投稿時間:2002/09/13(Fri) 13:34
投稿者名:A221
Eメール:
URL :
タイトル:
Re^5: 参照設定について
> > With xlsOBJ
> >     .worksheets(1).cells(1, 1).Value = "test"
> >     .worksheets(1).cells(2, 1).Value = "Row=2 Col=1"

すっかり失念していました。この直後に下記を加えてください。

.Windows(1).Visible = True

(1)の部分はファイル名"test.xls"でもかまいません。

> また何かありましたらよろしくお願いします!! ありがとうございました!

がんばってください。(^^)

投稿時間:2002/09/13(Fri) 17:32
投稿者名:M
URL :
タイトル:
Re^6: 参照設定について
A221さん、ありがとうございます
> > > With xlsOBJ
> > >     .worksheets(1).cells(1, 1).Value = "test"
> > >     .worksheets(1).cells(2, 1).Value = "Row=2 Col=1"
>
> すっかり失念していました。この直後に下記を加えてください。
>
> .Windows(1).Visible = True
>
> (1)の部分はファイル名"test.xls"でもかまいません。

一行付け足したら無事見ることができました。なんか感動しました!
ありがとうございます

> がんばってください。(^^)

応援ありがとうございます。今回教えてもらった方法で頑張ります (^○^)

投稿時間:2002/09/11(Wed) 21:06
投稿者名:とろ
Eメール:
URL :
タイトル:
Re: 参照設定について
>  ここのページを参考に参照設定でMicrosoft Excel 9.0 Object LibraryにチェックをしてEXCELを
> 利用したVBプログラムを作成したのですが、exeファイルを作成する際に参照設定のチェックをはずして
> 作成するとしたらどのようにプログラムを変更していけばよろしいのでしょうか?
>   Dim xlApp  As Excel.Application
>   Dim xlBook As Excel.Workbook
>   Dim xlSheet As Excel.Worksheet

他の方が回答されてるように、参照設定を外しても外さなくても、
ほとんど変わりません。

ただ、どうしても外したいというならば、
上の3つの変数の型をすべて Object にすれば、
参照設定を外しても実行可能かと、思います。

投稿時間:2002/09/11(Wed) 23:44
投稿者名:M
URL :
タイトル:
Re^2: 参照設定について
とろさん、返答ありがとうございます

> 他の方が回答されてるように、参照設定を外しても外さなくても、
> ほとんど変わりません。

そうですか。分かりました。いろいろ考えてみます。

> ただ、どうしても外したいというならば、
> 上の3つの変数の型をすべて Object にすれば、
> 参照設定を外しても実行可能かと、思います。

分かりました。試してみます。
まあ、このまま参照設定をはずさないのがいいみたいですね!
とにかく、ありがとうございます。

投稿時間:2002/09/12(Thu) 23:52
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re^3: 参照設定について
> > ただ、どうしても外したいというならば、
> > 上の3つの変数の型をすべて Object にすれば、
> > 参照設定を外しても実行可能かと、思います。
>
> 分かりました。試してみます。
> まあ、このまま参照設定をはずさないのがいいみたいですね!

対象とするExcelのバージョン次第ではないでしょうか。
業務アプリの場合、対象とするExcelのバージョンが複数ある場合が多いので、
最終的に参照設定をはずしてコンパイルすることは多いと思います。

参照設定の有無による違いを書きます。

・参照設定する場合(アーリーバインド)
  - 事前に(コンパイル時に)オブジェクト参照が解決しているのでレイトバインドの場合より高速に動作します。
  - 参照設定しているExcelのバージョンでしか動作しません。
  - ExcelVBAの定数を利用できます。
  - Excel固有の型が使えます。(Excel.Application、Excel.Workbookなど)
  - インテリセンスが効きます。

・参照設定をしない場合(レイトバインド)
  - アーリーバインドより若干、動作が遅いです。(気にするほどではないと思いますが)
  - 処理内容そのものの互換性やExcelのオブジェクト群が持つ機能の互換性は別として、
    Excelのバージョンに関係なく動作します。
    (バージョンに依存しない機能のみを利用するようにバージョン間の違いは意識する必要があります)
  - ExcelVBAの定数が使えないので、定数名とその値を調べて、
    Constで自前で同じものを定義する必要があります。  
  - Excel固有の型の代わりにObject型を使います。(とろさんのおっしゃる通り)
    そのため、開発環境上でインテリセンスが使えません。

バージョン間での機能の有無が違ったり、同じ機能でも動作結果が違うことがあるでしょうから、
バージョン依存の機能は使わないことと、各バージョンのExcelの環境でのテストが必須になります。

投稿時間:2002/09/13(Fri) 01:11
投稿者名:MIKAN
Eメール:
URL :
タイトル:
Re^4: 参照設定について
>バージョン間での機能の有無が違ったり、同じ機能でも動作結果が違うことがあるでしょうから、
>バージョン依存の機能は使わないことと、各バージョンのExcelの環境でのテストが必須になります。

 昔のExcelはわかりませんが、バージョンを調べられるみたいなので
バージョンをチェックして処理を振り分けるのもありではないかと思います。
    Dim xlApp   As Object
    Set xlApp = CreateObject("Excel.Application")
    Label1.Caption = xlApp.version
    Set xlApp = Nothing

 VBとOfficeの相性とかもあるので、あまり古いExcelと組み合わせるのもどうか
と思いますが。

投稿時間:2002/09/13(Fri) 18:06
投稿者名:M
URL :
タイトル:
Re^5: 参照設定について
MIKANさん、ありがとうございます
>  昔のExcelはわかりませんが、バージョンを調べられるみたいなので
> バージョンをチェックして処理を振り分けるのもありではないかと思います。

なるほど〜、それも手ではありますね!ただVB初心者な私が器用に振り分けできるかな・・

>     Dim xlApp   As Object
>     Set xlApp = CreateObject("Excel.Application")
>     Label1.Caption = xlApp.version
>     Set xlApp = Nothing

バージョンの調べ方ありがとうございます。試してみたらちゃんと表示されました!これから色々と
利用させていただきます!

>  VBとOfficeの相性とかもあるので、あまり古いExcelと組み合わせるのもどうか
> と思いますが。

そんなに古いEXcelと組み合わせる事はないと思うんですが、これからどんどんEXCELのバージョンが
あがった時が心配でして!今までは正常に使えていてEXCELのバージョンをあげた後にいきなり動作
が異常になってデータが消えたりしたら大変なので(バックアップはとってありますが)どちらにしても
そうなると今回作ったプログラムは使えなくなってしまうのでそうならないようにしたいと思ったんです
色々とありがとうございました!!

投稿時間:2002/09/13(Fri) 17:44
投稿者名:M
URL :
タイトル:
Re^4: 参照設定について
よねKENさん、ありがとうございます
> 対象とするExcelのバージョン次第ではないでしょうか。
> 業務アプリの場合、対象とするExcelのバージョンが複数ある場合が多いので、
> 最終的に参照設定をはずしてコンパイルすることは多いと思います。

そうなんですよね〜!バージョンが複数ある場合を想定すると参照設定をはずした方がいいんですよね〜!
私はVB初心者なのでここのページを見てなんとかEXCELをVBで色々出来るようにしていたので参照設定を
はずすとなると本当に分からなくなってしまったんですよ〜
>
> 参照設定の有無による違いを書きます。
>
> ・参照設定をしない場合(レイトバインド)
>   - アーリーバインドより若干、動作が遅いです。(気にするほどではないと思いますが)
>   - 処理内容そのものの互換性やExcelのオブジェクト群が持つ機能の互換性は別として、
>     Excelのバージョンに関係なく動作します。
>     (バージョンに依存しない機能のみを利用するようにバージョン間の違いは意識する必要があります)
>   - ExcelVBAの定数が使えないので、定数名とその値を調べて、
>     Constで自前で同じものを定義する必要があります。  
>   - Excel固有の型の代わりにObject型を使います。(とろさんのおっしゃる通り)
>     そのため、開発環境上でインテリセンスが使えません。

なるほど〜、VBAの定数が使えないのですか!A221さんの教えてくださった方法で書き込む事はできても
今やってるように罫線を引いたりするのはかなり大変そうですね!今までEXCELでマクロを記録してそれ
を参考にしてプログラム組んでたんですが。。。できるかな・・
とにかく色々試してみます。よねKENさん、ありがとうございました。