ドライブC:の1つのマスターフォルダ内に複数のフォルダに複数のcsvファイルがあります。一部のファイルは毎日更新されます。ファイルに更新がある場合は、ファイル名を含むアクセステーブルに新しい日次データを読み込む必要があります。ここまでのスクリプトは、すべてのcsvファイルからすべてのデータをインポートします。次に、新しいレコードにファイル名を追加します。すべてのレコードにファイル名を追加する必要があります。csvファイルをインポート中にアクセステーブルにファイル名を追加
ご協力いただければ幸いです。
スクリプト:
サブImport_multiple_csv_files()
Const strPath As String = "C:\text1\" 'Directory Path
Dim strFile As String 'Filename
Dim strFileList() As String 'File Array
Dim intFile As Integer 'File Number
Dim rs As DAO.Recordset
'Loop through the folder & build file list
strFile = Dir(strPath & "*.csv")
While strFile <> ""
'add files to the list
intFile = intFile + 1
ReDim Preserve strFileList(1 To intFile)
strFileList(intFile) = strFile
strFile = Dir()
Wend
'see if any files were found
If intFile = 0 Then
MsgBox "No files found"
Exit Sub
End If
'cycle through the list of files & import to Access
'creating a new table called MyTable
For intFile = 1 To UBound(strFileList)
DoCmd.TransferText acImportDelimi, , _
"Test", strPath & strFileList(intFile)
‘add file name to record
Set rs = CurrentDb.OpenRecordset("Test")
rs.AddNew
rs.Fields("Com").Value = Dir(strPath & "*")
rs.Update
rs.Close
Set rs = Nothing
Next
MsgBox UBound(strFileList) & " Files were Imported"
End Subの
こんにちは、Tksあなたの助言のために。それぞれのレコードがアクセステーブルに置かれるときに 'For intFile = 1 To UBound(strFileList)'を開始するフロチャートでは、ファイル名をテーブルの列 'com'に配置します。あなたの提案はこのループの中で機能しますか? –
はい、インポートしたレコードごとにファイル名を保存します。 TransferTextは、ファイル全体(複数のレコード)を一度に読み込みます。これらのレコードをファイル名で更新する必要があります。ループ内のUPDATEステートメントを呼び出して、WHERE句が最新のレコードのみをピックアップすることを確認します。そうしないと、以前のレコードも更新されます。使用したレコードセットコードでは、別の新しいレコードを追加して、既存のレコードを更新しません。レコードセットで必要なことをすることはできますが、1行のDoCmd.RunSQLステートメントはより簡単になります。 – Simon
'CurrentDB.Execute SQLString、dbFailOnError'は、' DoCmd.RunSQL'で取得した警告をスキップし、データベースオブジェクトにCurrentDBを割り当てて、それを使用すると、 'RecordsAffected、有益かもしれません。 – Fionnuala