質問です。
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を使うことによって何か不具合や都合の悪いことが起こりうるのでしょうか?
あるいは当方の見当違いで根本的に何かが間違っているのでしょうか?
どんな些細なことでも結構ですので宜しくお願いします。
No.2ベストアンサー
- 回答日時:
普通はその2を書きます。
ちなみに1と2は
1は参照設定でExcelが指定されている時のみ使用できます。すでに初めから何のオブジェクトかを指定している訳ですから、CreateObjectは必要ありません。また都度新しいオブジェクトが必要であれば New をつければいいだけです。
(ex)
Set xlApp = New Excel.Application
実行環境のWin98SEの環境では、参照設定が通らないのでしょう。だからエラーになるものと思われます(たぶんexcelのバージョンが違うからでしょうがもしかしたらOSかも)。
その2を使う事による実行上では全く不都合はありませんと、いうか参照設定によらないので様々な環境で動くはずです。
まぁ、あえて欠点いうなら開発環境の時に
xlApp とうって . をうった時にメソッドやプロパティが自動で出てこない事ですね。
開発環境では1にしておいて(CreateObjectしても特別に問題はないので)、実行環境の時に2にすればいーかもしれません。
よくわからない質問かなと思いましたが、かなりピンポイント+α的で親切でわかりやすい回答に非常に感謝です!!
「Excel.Application」と参考書に書かれていたので(信じきっていました。)実行環境でエラーが出た時は、全コードをひっぱりだして1日中眉をひそめておりました。「Object」で実行した時はエラーを期待していましたが通ってしまったので思わずこんな質問をしてしまいました。
回答を読んでよくよく考えてみるとこんなことで悩んでたんだーと反省しきりです。
参考書(というかTips集)のサンプルをただ写すのは邪道ですね。
今回は本当にありがとうございます!!
No.4
- 回答日時:
>一般的に前者を事前バインディング、後者を遅延バインディングという。
アーリーバインディング、レイトバインディングともいいます。
違いとしては、型の解決をコンパイル時に行うのがアーリーバインディング、実行時に行うのがレイトバインディングになります。
これにより、実行速度に違いが出てきます。レイトバインディングの場合、実行時に特別な関数の呼び出しを行うため、オーバーヘッドがかかり実行速度が低下します。
アーリーバインディングではそのようなことはありませんが、コンパイル時に決定したが使える環境でないと動作しません。つまりこの場合、Excelのバージョンが違うのだと思われますが、そのせいで実行できなくなっているのでしょう。
No.3さんからの回答を得て、バインディングってなんのこっちゃ?と思ってネット検索していて
ttp://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/object_type.html
を見ていましたが、さらにわからない。それに.NETだからなぁと。他探すかと思っていましたが、こんなにわかり易い説明してくれておりました。
本当に感謝です。本屋で売っている参考書とかにはこんな親切丁寧に書いてないんです。
今回はありがとうございました。
No.3
- 回答日時:
一般的に前者を事前バインディング、後者を遅延バインディングという。
事前バインディングで開発して、リリース時に遅延バインディングに切り替えるのが
よいという意見を聞いたことがあります。
自信のでてくる回答に本当に感謝です。
当方結構初心者(Tips集のコピペが得意のなんちゃってプログラマ)なのでこういうネットの検索キーワードに使えそうな言葉はありがたいです。勉強になります。こういうちょこっとした知識がきっかけで芋づる式にバグ(というか意味がわからない処理)がなくなっていったことがあります。
エラーが出た時はどうしましょうと思って、実行環境をXPにしてしまおうかとか(他のXPのPCでは動いてました。)いろいろと考えたあげく、何気なくやった修正(なんでExcelと宣言してないのにExcel.Application型なの?と思いObject型に変更←後にこの考え方は間違っていると判明。もう参照設定で宣言しているんですね。)が通ってしまったので質問してしまいました。
プロの人が遅延バインディングにしてリリースしているんなら間違いないですね(爆)。
今回はどうもありがとうございました。
No.1
- 回答日時:
2が普通だと思うのですが、参考書には1という記述があったのでしょうか?
Set xlApp = CreateObject("Excel.Application")
のCreateObjectでWordとかExcelなどの指定をするので、
Dimの段階でExcel.Applicationを宣言できるのであれば、CreateObjectが必要ないように思えます。
あまり答えになってなかったかもしれません。すみません。
回答に感謝します。
なるほど、と思い実際に実験してみましたらその通りでした。無駄な作業をさせていたみたいです。
VBのわからない上司にかなり力説してしまっていたのに…
こういう豆知識的なことは参考書で読んだ固い文章よりも頭に残ります。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
split関数で区切り文字がない場合
-
Eclipse(JAVA)のデバッグで他...
-
「ワークスペースをビルド中」...
-
Javascriptの値をJava(JSP)へ渡...
-
Javaで年月の取得(YYYYMM形式で)
-
eclipseでスタックサイズを変更...
-
環境変数設定で
-
JAVAにのeclipseに関する質問で...
-
エクセルマクロエラー'Global'...
-
コマンドプロンプト実行での文...
-
コミット前の更新データをチェ...
-
NoClassDefFoundError: javax/m...
-
Worksheet_Changeが動かない
-
Javascriptのパーミッション
-
Scilab-6.1.0のwavelets module...
-
javaアプリケーションをH...
-
エクリプスで実行時、最新クラ...
-
jsのcss
-
FLASH上でjavaアプレットは起動...
-
Javaの環境について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
split関数で区切り文字がない場合
-
eclipseでスタックサイズを変更...
-
Eclipse(JAVA)のデバッグで他...
-
Javascriptの値をJava(JSP)へ渡...
-
「ワークスペースをビルド中」...
-
JAVAにのeclipseに関する質問で...
-
環境変数設定で
-
Javaで年月の取得(YYYYMM形式で)
-
コミット前の更新データをチェ...
-
Worksheet_Changeが動かない
-
Javascriptのパーミッション
-
jasper.exceptionとは?
-
javaからVBAを実行する方法を教...
-
Eclipseで実行>Javaアプリケー...
-
eclipseのjavaを実行できない
-
JAVAの質問です。 ( String arg...
-
Eclipse 実行→Javaアプリケー...
-
エクリプスで実行時、最新クラ...
-
バイナリーコードと、ソースコ...
-
Google Colabでimport soxが出...
おすすめ情報