Sub 長い文字列を切らずにインポート()
Dim Tbl_Name As String 'データをインポートするテーブル名
Dim Tbl_DmyR As String 'ダミーレコードが格納されているテーブル名
Dim QName_DltAll As String 'インポート先テーブルの全レコード削除クエリ名
Dim QName_DltDmy As String 'ダミーレコード削除クエリ名
Dim Tgt_ST As String 'インポート対象のシート名
Dim Tgt_RG As String 'インポート対象のセル範囲指定
Dim Q As Long
Dim FD As FileDialog
Dim Fldr_Name As String 'ユーザーに選択させたフォルダ名
Dim File_Name As String
Dim File_Cnt As Long
Dim EX As Excel.Application
Dim BK As Excel.Workbook
Dim ST As Excel.Worksheet
Dim DB As DAO.Database
Dim RS As DAO.Recordset
'◆必要情報をセット(↓お手元のツールに合わせて書換えて下さい)
Tbl_Name = "T_Data" 'インポート先テーブル名
Tbl_DmyR = "T_DmyR" 'ダミーレコードのテーブル名
QName_DltAll = "削除Q_T_Data" 'インポート先テーブルの全レコード削除クエリ名
QName_DltDmy = "削除Q_ダミーレコード" 'ダミーレコード削除クエリ名
Tgt_ST = "Data" 'インポート対象のシート名
Tgt_RG = "A1:F" 'インポート対象のセル範囲指定
'◆ユーザーに実行意思を確認
Q = MsgBox("データインポートを実施しますか?", _
vbYesNo + vbQuestion, "<確認>")
If Q = vbNo Then
MsgBox "キャンセルされました。"
Exit Sub
End If
'◆ユーザーによるフォルダ選択
Set FD = FileDialog(msoFileDialogFolderPicker)
With FD
.InitialFileName = CurrentProject.Path
.Title = "フォルダを指定してください"
.ButtonName = "決定"
If .Show Then
Fldr_Name = .SelectedItems(1)
Else
MsgBox "フォルダ選択がキャンセルされました。終了します。"
Exit Sub
End If
End With
'◆Excelの存在有無チェック
File_Name = Dir(Fldr_Name & "\*xls*")
If File_Name = "" Then
MsgBox "指定フォルダ内にExcelファイルが格納されていません!", _
vbExclamation
Exit Sub
End If
'◆インポート先テーブルをクリア
DoCmd.SetWarnings False
DoCmd.OpenQuery QName_DltAll
DoCmd.SetWarnings True
'◆ダミーレコード用オブジェクト立ち上げ
Set DB = CurrentDb
'◆新規Excel立ち上げ(非表示)
Set EX = New Excel.Application
EX.Visible = False
'◆ループ処理開始
Do While File_Name <> ""
'◆読み取り専用でExcelファイルを開き、シートを取得
Set BK = EX.Workbooks.Open(FileName:=Fldr_Name & "\" & File_Name, _
ReadOnly:=True)
Set ST = BK.Worksheets(Tgt_ST)
'◆1行目ヘッダーの下に行挿入し、ダミーレコードを貼付
Set RS = DB.OpenRecordset(Tbl_DmyR)
ST.Rows("2:2").Insert Shift:=xlDown, _
CopyOrigin:=xlFormatFromLeftOrAbove
ST.Range("A2").CopyFromRecordset RS
RS.Close
'◆Accessと同階層にExcelファイルを別名保存する
BK.SaveAs CurrentProject.Path & "\インポート用一時ファイル.xlsx"
BK.Close
'◆一時ファイルをインポート
DoCmd.TransferSpreadsheet acImport, _
acSpreadsheetTypeExcel12Xml, Tbl_Name, _
CurrentProject.Path & "\インポート用一時ファイル.xlsx", _
True, Tgt_ST & "!" & Tgt_RG
'◆一時ファイルを削除し、ファイル数を数えて、再Dir
Kill CurrentProject.Path & "\インポート用一時ファイル.xlsx"
File_Cnt = File_Cnt + 1
File_Name = Dir()
Loop
'◆オブジェクトを閉じる
Set BK = Nothing
EX.Quit
Set EX = Nothing
Set RS = Nothing
DB.Close
Set DB = Nothing
'◆ダミーレコードを削除
DoCmd.SetWarnings False
DoCmd.OpenQuery QName_DltDmy
DoCmd.SetWarnings True
'◆終了メッセージ
MsgBox "データのインポートが完了しました。" & vbCrLf & _
"ファイル数:" & File_Cnt, vbInformation
End Sub