こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VB6.0上でExcelオブジェクトを生成

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

その1

Dim xlApp As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet

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



その2

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)

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

開発環境は
 Windows2000
 VB 6.0
 Excel 2003
です。

投稿日時 - 2008-05-08 01:57:30

QNo.4005798

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

VB6で作成したアプリ(以下『VB6アプリ』と省略)でExcelを起動する場合
Excelのバージョンが固定出来るなら参照設定で『Microsoft Excel ...』を行い

Dim xlApp as Excel.Application
Set xlApp = new Excel.Application
と記述するか 変数定義とExcelのインスタンスかを同時にするため
Dim xlApp as New Excel.Application
といった記述方法になります

現在起動中のExcelを取得したいなら
Dim xlApp as Excel.Application
と宣言して

Set xlApp = GetObject(,"Excel.Application")
といった具合で記述します
# 複数のExcelが起動されている場合はうまく取得出来ない場合があります

As Objectで宣言するのはVB6アプリを使うパソコンに
Excel-XP(2002)やExcel2000などバージョンが違う物がある場合です
参照設定の『Microsoft Excel ...』はバージョン固有の物ですので下位(上位)互換性はありません
あくまで 開発に使ったタイプライブラリと同じバージョンが要求されます
またバージョンの異なる複数のExcelの参照設定も出来ません

極論をいえば As Object宣言した変数には他のオブジェクトを代入する事も可能です
Dim xlApp as Object
Set xlApp = Form2
などとしても怒られません
# ただし Form型に無い プロパティやメソッドは当然エラーになります

EXE作成の際には『Microsoft Excel ...』の参照設定を外すということです
これがされたままですと 異なるバージョンの場合エラーになってVB6アプリが起動出来ない場合もあります

投稿日時 - 2008-05-08 17:36:20

お礼

質問内容が上手く伝わらないかと思いましたが、
かなりピンポイント+αで、親切で分かり易い
回答に感謝です。
「Excel.Application」と参考書に書かれていた
ので(信じきっていました。)
ネットで検索すると、「New Excel.Application」
とかで、New を付けるとあり、こんがらかっていました。
実際、エラーなども出ず何が正しいのか。
思わずこんな質問をしてしまいました。

投稿日時 - 2008-05-08 23:16:01

ANo.2

参照設定をして、変数の型まで定義した以上は「その1」でやる方が「筋」と言えましょう。
「その2」はVBScriptに応用する場合には有効な方法です。その場合、変数はVariant(型宣言なし)
としておくと移植性が更に良くなります。
VB6ガチガチ、移植性など考慮外なら「その1」、VBS開発も視野に入れるなら「その2」といった感じでしょうか。

投稿日時 - 2008-05-08 10:40:17

補足

どのような時に使用するのか説明ありがとうございます。
参照設定で、ExcelのObjectLibraryまで設定して
いるのに、VB上では書き方が複数あったので、何か
特別なことでもあるのかと思いました。
参照設定で、ObjectLibraryを設定している場合と
設定できない場合で違ってくるのでね。

投稿日時 - 2008-05-08 23:26:00

ANo.1

ん~ 書くとすれば

# エクセルのバージョンが固定出来るなら
Dim xlApp as Excel.Application
Dim xlBook as Excel.Workbook
Dim xlShet as Excel.Worksheet

Set xlApp = New Excel.Application
Set xlBook = xlApp.WorkBooks.Add
Set xlSheet = xBook,.WorkSheets(1)

# エクセルのバージョンが固定出来ない場合オブジェクトの宣言を
Dim xlApp as Object
Dim xlBook as Object
Dim xlShet as Object

# xlAppを作成する場合に CreateObjectを使って
Set xlApp = CreateObject("Excel.Application")
といった具合にします
# この場合Exeを作る場合にExcelの参照設定も外してからEXEにします

# xlBook、xlSheetの代入は固定出来る場合と同じでいいです

固定出来る場合は xlAppのオブジェクト生成を 宣言と同時でもかまいません
Dim xlApp as New Excel.Application

ブックやシートを Newで生成は殆どしません
Addメソッドの戻りを使うなどで代用します

投稿日時 - 2008-05-08 02:16:19

補足

固定出来るならとは、[プロジェクト]→[参照設定]でExeclを指定して
いるということでしょうか。
この場合は、

「Set xlApp = CreateObject("Excel.Application")」

よりも

「Set xlApp = New Excel.Application」

ということですね。

> # この場合Exeを作る場合にExcelの参照設定も外してからEXEにします
[プロジェクト]→[参照設定]の Microsoft Excel *.* ObjectLibrary を
外すということでしょうか。


質問がどうどうめぐりかも知れませんが、
> 固定出来る場合は xlAppのオブジェクト生成を 宣言と同時でもかまいません
> Dim xlApp as New Excel.Application
New を指定する場合というのはどういう時なのでしょうか。

色々と探して見たり、人に尋ねて見たりしたのですが、
Newは、都度新しいオブジェクトが必要であれば、New をつければいい
だけです。
と、出てきたのですが、良く分かりません。

投稿日時 - 2008-05-08 10:32:25

あなたにオススメの質問