CSV ファイルを 1 行ずつ読み取ってから各行で何かを行うのではなく、ファイルを ADO レコードセットとして開く必要があると思います。Access 宛先テーブルの DAO レコードセットを開きます。
その後、ADO レコードセットの各行のフィールドを反復処理し、それらの値を DAO レコードセットの新しい行に追加できます。宛先テーブルに、CSV フィールドと同じ名前で互換性のあるデータ型のフィールドが含まれている限り、これはかなりスムーズです。
Public Sub Addikt()
#If ProjectStatus = "DEV" Then
' needs reference for Microsoft ActiveX Data Objects
Dim cn As ADODB.Connection
Dim fld As ADODB.Field
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
#Else ' assume PROD
Const adCmdText As Long = 1
Const adLockReadOnly As Long = 1
Const adOpenForwardOnly As Long = 0
Dim cn As Object
Dim fld As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
#End If
Const cstrDestination As String = "tblMaster"
Const cstrFile As String = "temp.csv"
Const cstrFolder As String = "C:\share\Access"
Dim db As DAO.Database
Dim rsDao As DAO.Recordset
Dim strConnectionString As String
Dim strName As String
Dim strSelect As String
strConnectionString = "Provider=" & _
CurrentProject.Connection.Provider & _
";Data Source=" & cstrFolder & Chr(92) & _
";Extended Properties='text;HDR=YES;FMT=Delimited'"
'Debug.Print strConnectionString
cn.Open strConnectionString
strSelect = "SELECT * FROM " & cstrFile
rs.Open strSelect, cn, adOpenForwardOnly, _
adLockReadOnly, adCmdText
Set db = CurrentDb
Set rsDao = db.OpenRecordset(cstrDestination, _
dbOpenTable, dbAppendOnly + dbFailOnError)
Do While Not rs.EOF
rsDao.AddNew
For Each fld In rs.Fields
strName = fld.Name
rsDao.Fields(strName) = rs.Fields(strName).value
Next fld
rsDao.Update
rs.MoveNext
Loop
rsDao.Close
Set rsDao = Nothing
Set db = Nothing
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
これは、その手順を保存したモジュールの宣言セクションです。
Option Compare Database
Option Explicit
#Const ProjectStatus = "DEV" '"DEV" or "PROD"
これらの定数の値を変更して、システムでテストします。
Const cstrDestination As String = "tblMaster"
Const cstrFile As String = "temp.csv"
Const cstrFolder As String = "C:\share\Access"
フォルダー名には末尾のバックスラッシュが含まれていないことに注意してください。
ファイル名を定数として残すのではなく、パラメーターとして渡すようにその手順を調整する必要があります。また、CSV ファイルが複数のディレクトリに保存されている場合は、フォルダー名もパラメーターとして渡す必要があります。
うまくいけば、1 つのファイルに対してそれを行う方法を示すだけで十分であり、ここからすべての CSV ファイルを処理することができます。エラー処理の追加も検討してください。