こんにちは。
ExcelではVBAが使えるレベルですが、Access初心者です。
エクセルのワークブックにデータがA~N列までデータが入っています。
1行目はタイトル(フィールド名)で2行目以下がデータ(レコード)になります。
ワークブックの中のシート数はさまざまです。
1行目のタイトル(フィールド名)はあってもデータがないものもありますし、
2行目以下のデータ(レコード)数もさまざまです。
ワークブック(とその中のシート)が多いので
VBAを使ってAccessに取り込みたいと思っています。
いろいろネットで検索して以下のVBAまでたどりついたのですが、
それぞれ「ワークブック名_シート名」というテーブルに取り込まれます。
これを例えば「総合」というようなテーブル一つに取り込むにはどうしたらいいでしょうか?
週末をつぶして試行錯誤しましたが、どうしても解決しないのでアドバイスいただけるとうれしいです。
Sub ImportFromExcel()
Dim tgtXLname As String
Dim tgtXLpath As String
Dim newTBLname As String
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim sCnt As Integer
Dim n As Integer
Application.Echo False
TargetFolder = "C:\work"
tgtXLname = Dir(TargetFolder & "\*.xls")
Do While tgtXLname <> ""
tgtXLpath = TargetFolder(a) & "\" & tgtXLname
Set xlApp = GetObject(, "Excel.Application")
xlApp.Application.Visible = True
xlApp.Workbooks.Open tgtXLpath
Set xlBook = xlApp.ActiveWorkbook
sCnt = xlBook.Worksheets.Count
For n = 1 To sCnt
Set xlSheet = xlBook.Worksheets(n)
newTBLname = Left(tgtXLname, Len(tgtXLname) - 4) & "_" & xlSheet.Name
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, newTBLname, tgtXLpath, True, xlSheet.Name & "!" & "A:N"
Set xlSheet = Nothing
Next
xlBook.Close SaveChanges:=False
Set xlBook = Nothing
tgtXLname = Dir()
Loop
xlApp.Application.Quit
Set xlApp = Nothing
Application.Echo True
MsgBox "インポート終了"
End Sub
お礼
再度の回答ありがとうございます。 私自身がAccessのVBAはまだ勉強したてですので、 ご紹介いただいたVBAのコードを参考にしていきたいと思います。 レコードの追加が難しければ、シートごとにインポートしたテーブルを 一つにまとめるVBAを考えてみようと思います。
補足
とりあえずappendは難しそうなので、クエリを使って結合する方向で考えていきたいと思います。 解決の糸口がみつかり助かりました。ありがとうございました。