お世話になっております。
先日教えていただいたエクセルを操作する方法を調べてコードを作成してみましたが、おそらく間違っていると思われますので、ご指導お願いします。
最終的には先日質問で出させてたいだいた複数のエクセルファイルのデータをテーブルに保存したいと考えています。
今回作ってみたのはひとつのエクセルファイルでセルがばらばらになっている状態でテーブルに格納するというところまでのものを作りたかったのですが、まずシートを選ぶことができませんでした。
そして、2回同じ処理を行おうとするとエラーが出てしまします。
コードは
Dim ExApp As Object
Set ExApp = CreateObject("Excel.Application")
ExApp.Visible = True
Dim DesktopPath As String, FilePath As String, WSH As Variant
Set WSH = CreateObject("Wscript.Shell")
FolderPath = "C:\アクセス\エクセル"
FilePath = FolderPath & "\エクセル操作.xlsx"
Dim Rng1 As String
Dim Rng2 As String
Dim Rng3 As String
Dim Rng4 As String
ExApp.Workbooks.Open FileName:=FilePath
Rng1 = Sheets(1).Cells(1, 1)
Rng2 = Sheets(1).Cells(1, 3)
Rng3 = Sheets(1).Cells(4, 1)
Rng4 = Sheets(1).Cells(4, 3)
With ExApp.Workbooks(ExApp.Workbooks.Count)
.Close
End With
ExApp.Quit
CurrentDb.Execute "insert into T1(f1,f2,f3,f4) VALUES('" & Rng1 & "','" & Rng2 & "','" & Rng3 & "','" & Rng4 & "');", dbFailOnError
Set ExApp = Nothing
Set WSH = Nothing
としました。
2回目に実行したときに発生するエラーは、
実行時エラー'1004':'sheets'メソッドは失敗しました:'_Globalオブジェクト'
というものでした。
とても見苦しいコードだと思いますが、どうぞよろしくお願いします。
Rng1 = Sheets(1).Cells(1, 1)
Rng2 = Sheets(1).Cells(1, 3)
Rng3 = Sheets(1).Cells(4, 1)
Rng4 = Sheets(1).Cells(4, 3)
を
Rng1 = ExApp.Sheets(1).Cells(1, 1)
Rng2 = ExApp.Sheets(1).Cells(1, 3)
Rng3 = ExApp.Sheets(1).Cells(4, 1)
Rng4 = ExApp.Sheets(1).Cells(4, 3)
でどうでしょうか?
Set WSH = CreateObject("Wscript.Shell") は不要(使っていないなので)
開いたブックは変数に代入しておいて、それに対して操作する。
Set ExApp = Nothing はなくてもOK、End Sub で自動で Nothing にしてくれるので。
以上の点を考慮して修正すると下記になります。
Ayameさん、hatenaさんご指摘ありがとうございます。
教えていただいた内容で、エラーが出なくなりました。シートも選択できるように修正してみました。
前回教えていただいたコードも組み合わせてなんとか複数ファイルを取り込んで、フォルダを移動させることができていると思われますが、確認していただけないでしょうか。
どうぞよろしくお願いします。
上げさせていただいたコードだと、エラーが発生したときに、ブランクのレコードができてしまったので、
の位置を
の前に変えたらうまくいったようです。