- 締切済み
Access インポート時にファイル名を追加したい
Access2007のVBAで、あるフォルダ内の全CSVをインポートしたくて、次のページを参考にして、標準モジュールを組みました。 そして、あるフォルダ内全CSVのインポートには成功しました。 その時、全CSVはテーブル「Import_Table」にインポートされます。そこで、インポート時に元のCSVのファイル名をインポート先のテーブルの最後のフィールドに追加することはできるでしょうか? もし、知っておられる方がいたら、教えてください。 お願いします。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1226480442 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ Sub ImpCSV() Dim objFs As Object Dim objFld As Object Dim objFl As Object Const cnsFILEPATH = "C:\Documents and Settings\hoge\デスクトップ\hogehoge" 'フォルダー名 Const cnsTABENAME = "Import_Table" Set objFs = CreateObject("Scripting.FileSystemObject") Set objFld = objFs.GetFolder(cnsFILEPATH) For Each objFl In objFld.files If Right(objFl.Name, 4) = ".csv" Then DoCmd.TransferText TransferType:=acImportDelim,"インポート定義",tablename:=cnsTABENAME, _ filename:=cnsFILEPATH & "\" & objFl.Name, hasfieldnames:=False End If Next Set objFl = Nothing Set objFld = Nothing Set objFs = Nothing End Sub /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- みんなの回答 (4)
- 専門家の回答
お礼
>>piroin654さん 回答ありがとうございます。 返事が遅くなって申し訳ありません。 piroin654さんのおっしゃる通り自分で下のように試してみました。 結果は、一部はできたけど一部はできなかったです。 例えば、 [hoge1.csc] 1,2 3,4 [hoge2.csv] 5,6 7 の2つのCSVをインポートすると、 [先客あり]と表示されて、4の1つ右のフィールドには[hoge1.csc]、7の2つ右には[hoge2.csv]と入力されました。 やりたかった「それぞれのレコード右側にインポートファイル名が入力される」ものにはもうちょっとでした。 入力した標準モジュールは、下になります。 インポート定義YYYYではインポートファイル名格納用にtesu4という空のフィールドを用意しています。 個人的には、「Sub cmdFileName」で「rs.MoveLast」というステートメントがあるから、ファイルの一番最後のレコードだけインポートファイル名が入力されるのかなと考えて、「MoveNext」「MoveFirst」を試したりしましたが、どれもうまくいきませんでした。 /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ Sub ImpCSV() Dim objFs As Object Dim objFld As Object Dim objFl As Object Const cnsFILEPATH = "C:\Documents and Settings\XXXX\デスクトップ\hoge" 'インポートフォルダー名 Const cnsTABENAME = "Import_Table" 'インポート先テーブル名 Set objFs = CreateObject("Scripting.FileSystemObject") Set objFld = objFs.GetFolder(cnsFILEPATH) For Each objFl In objFld.files If Right(objFl.Name, 4) = ".csv" Then 'インポート拡張子 DoCmd.TransferText TransferType:=acImportDelim, SpecificationName:="インポート定義YYYY", tablename:=cnsTABENAME, _ FileName:=cnsFILEPATH & "\" & objFl.Name, hasfieldnames:=False Call cmdFileName(objFl.Name) End If Next Set objFl = Nothing Set objFld = Nothing Set objFs = Nothing End Sub Sub cmdFileName(strFile As String) Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Import_Table") 'インポートテーブル名 If rs.RecordCount > 0 Then rs.MoveLast If IsNull(rs!tesu4) Then 'インポートファイル名格納フィールド rs.Edit rs!tesu4 = strFile 'インポートファイル名格納フィールド rs.Update Else MsgBox ("先客有り") End If End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/