
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
です。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.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アプリが起動出来ない場合もあります
質問内容が上手く伝わらないかと思いましたが、
かなりピンポイント+αで、親切で分かり易い
回答に感謝です。
「Excel.Application」と参考書に書かれていた
ので(信じきっていました。)
ネットで検索すると、「New Excel.Application」
とかで、New を付けるとあり、こんがらかっていました。
実際、エラーなども出ず何が正しいのか。
思わずこんな質問をしてしまいました。
No.2
- 回答日時:
参照設定をして、変数の型まで定義した以上は「その1」でやる方が「筋」と言えましょう。
「その2」はVBScriptに応用する場合には有効な方法です。その場合、変数はVariant(型宣言なし)
としておくと移植性が更に良くなります。
VB6ガチガチ、移植性など考慮外なら「その1」、VBS開発も視野に入れるなら「その2」といった感じでしょうか。
この回答への補足
どのような時に使用するのか説明ありがとうございます。
参照設定で、ExcelのObjectLibraryまで設定して
いるのに、VB上では書き方が複数あったので、何か
特別なことでもあるのかと思いました。
参照設定で、ObjectLibraryを設定している場合と
設定できない場合で違ってくるのでね。
No.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メソッドの戻りを使うなどで代用します
この回答への補足
固定出来るならとは、[プロジェクト]→[参照設定]で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 をつければいい
だけです。
と、出てきたのですが、良く分かりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エラー処理 3 2022/04/11 14:58
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
VBAで Set wb = Sheets(1).Cop...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
エクセルのVBAの標準モジュール...
-
AccessVBAで「dim dbs as datab...
-
ASP レコードセットしたオブジ...
-
vb6.0でEXCELオブジェクトの使用
-
パワーポイント filedialogでフ...
-
エクセルから表をパワーポイン...
-
アクセスにてオブジェクト名変...
-
エクセルVBAで配列内に空白デー...
-
getterとsetterについて
-
CreateObjectとGetObjectの違い
-
(初心者です)VBAについて。「実...
-
AccessVBAからWordのマクロを実...
-
ListView内の検索 VB6
-
オブジェクト変数またはWITHブ...
-
sheetsメソッドの失敗
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
VBAからPDFファイルにパスワー...
-
エクセルVBAでcode128のバー...
-
VBScriptからDLL参照設定したい
-
VBAについてです。 初心者です...
-
エクセルマクロエラー「'Cells'...
-
オブジェクトが見つかりません
-
エクセルVBAで配列内に空白デー...
-
Excel VBAでWordの複数ファイル...
-
VBScriptでファイルの日時順(降...
おすすめ情報