- 締切済み
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 です。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
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アプリが起動出来ない場合もあります
- nda23
- ベストアンサー率54% (777/1415)
参照設定をして、変数の型まで定義した以上は「その1」でやる方が「筋」と言えましょう。 「その2」はVBScriptに応用する場合には有効な方法です。その場合、変数はVariant(型宣言なし) としておくと移植性が更に良くなります。 VB6ガチガチ、移植性など考慮外なら「その1」、VBS開発も視野に入れるなら「その2」といった感じでしょうか。
補足
どのような時に使用するのか説明ありがとうございます。 参照設定で、ExcelのObjectLibraryまで設定して いるのに、VB上では書き方が複数あったので、何か 特別なことでもあるのかと思いました。 参照設定で、ObjectLibraryを設定している場合と 設定できない場合で違ってくるのでね。
- redfox63
- ベストアンサー率71% (1325/1856)
ん~ 書くとすれば # エクセルのバージョンが固定出来るなら 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メソッドの戻りを使うなどで代用します
補足
固定出来るならとは、[プロジェクト]→[参照設定]で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 をつければいい だけです。 と、出てきたのですが、良く分かりません。
お礼
質問内容が上手く伝わらないかと思いましたが、 かなりピンポイント+αで、親切で分かり易い 回答に感謝です。 「Excel.Application」と参考書に書かれていた ので(信じきっていました。) ネットで検索すると、「New Excel.Application」 とかで、New を付けるとあり、こんがらかっていました。 実際、エラーなども出ず何が正しいのか。 思わずこんな質問をしてしまいました。