電子書籍の厳選無料作品が豊富!

質問です。
VB6.0上でExcelオブジェクトの生成についてです。

その1
Dim xlApp As Excel.Application

Set xlApp = CreateObject("Excel.Application")



その2
Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application")

と、どちらが良いのでしょうか?

開発環境は
Win XP SP2
VB 6.0
Excel 2003
実行環境は
Win 98 SE
VB 6.0(ランタイムのみ)
Excel 2000 SR-1
です。

開発環境ではその1、その2ともOKなのですが、
実行環境ではその2のみがOKです。
参考書にはその1が書かれていますが、その2を使うことによって何か不具合や都合の悪いことが起こりうるのでしょうか?
あるいは当方の見当違いで根本的に何かが間違っているのでしょうか?
どんな些細なことでも結構ですので宜しくお願いします。

A 回答 (4件)

普通はその2を書きます。



ちなみに1と2は

1は参照設定でExcelが指定されている時のみ使用できます。すでに初めから何のオブジェクトかを指定している訳ですから、CreateObjectは必要ありません。また都度新しいオブジェクトが必要であれば New をつければいいだけです。
(ex)
Set xlApp = New Excel.Application


実行環境のWin98SEの環境では、参照設定が通らないのでしょう。だからエラーになるものと思われます(たぶんexcelのバージョンが違うからでしょうがもしかしたらOSかも)。

その2を使う事による実行上では全く不都合はありませんと、いうか参照設定によらないので様々な環境で動くはずです。

まぁ、あえて欠点いうなら開発環境の時に

xlApp とうって . をうった時にメソッドやプロパティが自動で出てこない事ですね。

開発環境では1にしておいて(CreateObjectしても特別に問題はないので)、実行環境の時に2にすればいーかもしれません。
    • good
    • 0
この回答へのお礼

よくわからない質問かなと思いましたが、かなりピンポイント+α的で親切でわかりやすい回答に非常に感謝です!!
「Excel.Application」と参考書に書かれていたので(信じきっていました。)実行環境でエラーが出た時は、全コードをひっぱりだして1日中眉をひそめておりました。「Object」で実行した時はエラーを期待していましたが通ってしまったので思わずこんな質問をしてしまいました。
回答を読んでよくよく考えてみるとこんなことで悩んでたんだーと反省しきりです。
参考書(というかTips集)のサンプルをただ写すのは邪道ですね。
今回は本当にありがとうございます!!

お礼日時:2004/11/09 22:31

>一般的に前者を事前バインディング、後者を遅延バインディングという。



アーリーバインディング、レイトバインディングともいいます。

違いとしては、型の解決をコンパイル時に行うのがアーリーバインディング、実行時に行うのがレイトバインディングになります。
これにより、実行速度に違いが出てきます。レイトバインディングの場合、実行時に特別な関数の呼び出しを行うため、オーバーヘッドがかかり実行速度が低下します。

アーリーバインディングではそのようなことはありませんが、コンパイル時に決定したが使える環境でないと動作しません。つまりこの場合、Excelのバージョンが違うのだと思われますが、そのせいで実行できなくなっているのでしょう。
    • good
    • 0
この回答へのお礼

No.3さんからの回答を得て、バインディングってなんのこっちゃ?と思ってネット検索していて
ttp://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/object_type.html
を見ていましたが、さらにわからない。それに.NETだからなぁと。他探すかと思っていましたが、こんなにわかり易い説明してくれておりました。
本当に感謝です。本屋で売っている参考書とかにはこんな親切丁寧に書いてないんです。
今回はありがとうございました。

お礼日時:2004/11/09 23:06

一般的に前者を事前バインディング、後者を遅延バインディングという。



事前バインディングで開発して、リリース時に遅延バインディングに切り替えるのが
よいという意見を聞いたことがあります。
    • good
    • 0
この回答へのお礼

自信のでてくる回答に本当に感謝です。
当方結構初心者(Tips集のコピペが得意のなんちゃってプログラマ)なのでこういうネットの検索キーワードに使えそうな言葉はありがたいです。勉強になります。こういうちょこっとした知識がきっかけで芋づる式にバグ(というか意味がわからない処理)がなくなっていったことがあります。
エラーが出た時はどうしましょうと思って、実行環境をXPにしてしまおうかとか(他のXPのPCでは動いてました。)いろいろと考えたあげく、何気なくやった修正(なんでExcelと宣言してないのにExcel.Application型なの?と思いObject型に変更←後にこの考え方は間違っていると判明。もう参照設定で宣言しているんですね。)が通ってしまったので質問してしまいました。
プロの人が遅延バインディングにしてリリースしているんなら間違いないですね(爆)。
今回はどうもありがとうございました。

お礼日時:2004/11/09 22:52

2が普通だと思うのですが、参考書には1という記述があったのでしょうか?



Set xlApp = CreateObject("Excel.Application")
のCreateObjectでWordとかExcelなどの指定をするので、
Dimの段階でExcel.Applicationを宣言できるのであれば、CreateObjectが必要ないように思えます。

あまり答えになってなかったかもしれません。すみません。
    • good
    • 0
この回答へのお礼

回答に感謝します。
なるほど、と思い実際に実験してみましたらその通りでした。無駄な作業をさせていたみたいです。
VBのわからない上司にかなり力説してしまっていたのに…
こういう豆知識的なことは参考書で読んだ固い文章よりも頭に残ります。ありがとうございました。

お礼日時:2004/11/09 22:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!