ACCESSファイルからEXCELファイル(ACCESSファイルと同じフォルダ内にある、[aaa.xlsx])
のデータを取得する際に次のようなコードを書きました。
--------------------------------------- Sub Test1() '(エクセルの参照設定はしていません) Dim obj As Object Set obj = CreateObject("Excel.Application") obj.Application.Visible = True Dim str1 As String Dim i As Integer Dim j As Integer str1 = CurrentProject.Path & "\aaa.xlsx" With obj.Workbooks.Open(str1) For i = 1 To 3 For j = 1 To 3 Debug.Print .Worksheets("Sheet1").Cells(i, j).Value Next j Next i End With obj.Quit Set obj = Nothing End Sub ---------------------------------------------- 次に、 エクセルの参照設定をしたうえで、 次のようなコードを書きました。 Sub Test2() Dim str1 As String Dim i As Integer Dim j As Integer str1 = CurrentProject.Path & "\aaa.xlsx" With Workbooks.Open(str1) For i = 1 To 3 For j = 1 To 3 Debug.Print .Worksheets("Sheet1").Cells(i, j).Value Next j Next i End With End Sub ------------------------------------------------
Test2ではEXCELアプリケーションのオブジェクト(CreateObject)は作っていませんが、
プログラムは作動します。
ただ、バックグラウンドで生成された?EXCELアプリケーションが残ったままに
なってしまいました。
質問1
Test2で生成されたEXCELアプリケーションをきちんと消去する方法はありますか?
End with の次に「Excel.Application.Quit」を入れて試しましたが、消えませんでした。
質問2
(質問1に関連しますが)Test2のようなコードの書き方はよくないのでしょうか?
CreateObjectしなくても済むなら。。。。と思ったのですが。
最初に思ったのは、CreateObjectしないから、オブジェクトを終わらせる処理
(Set *** = NothingとかExcel.Application.Quitとか)を入れなくて済む
のではないかと考えましたが、CreateObjectしてもしなくても
EXCELのプロセスが発生するのならば、CreateObjectをして、そのオブジェクトを
Quitするべき、なのでしょうか?(ただ、Test2でも動くんですよね。。)
何かとんちんかんなことを質問しているのかもしれませんが、よろしくお願いします。

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/03 02:04
2019/06/03 02:54
2019/06/03 03:09 編集
2019/06/03 03:20
2019/06/03 04:08
2019/06/03 12:48
2019/06/03 13:06 編集