hatena
hatena
2023/01/11 (水) 00:35:06
ここで取得したファイル名を保存してみましたが、うまく保存できませんでした。SQLで追加してみましたが、インポートしたレコードではなく、別のレコードとして保存されてしまいました。
追加では新規レコードとして保存されますね。やりたいことは、下記のようなことでしょうか。
取り込み先テーブル(tblname = "テーブル名"
)に「フィールド名」というフィールドがあり、そのテーブルにインポートしたときに、インポートした各レコードにファイル名を書き込みたい。
だとしたら、更新クエリになりますね。インポート直後に下記のようなSQLを実行すればいいでしょう。
UPDATE テーブル名 SET ファイル名 = 'ファイル名' WHERE ファイル名 Is Null;"
前回の私のコードに追加するなら、下記のようになります。
Public Sub Sample()
Dim dname As String
Dim tblname As String
Dim sname As String
Dim destinationFolder As String
dname = "C:\アクセス\エクセル\"
tblname = "テーブル名"
sname = "sheet3!"
destinationFolder = "C:\アクセス\エクセル\処理済\"
Dim fso As New Scripting.FileSystemObject
Dim fl As Folder
Set fl = fso.GetFolder(dname) ' フォルダを取得
Dim f As File
For Each f In fl.Files 'フォルダ内のファイルを取得
If fso.GetExtensionName(f.Path) = "xlsx" Then '拡張子がxlsxのファイル
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, tblname, f.Path, True, sname
CurrentDb.Execute "UPDATE Sheet1 SET ファイル名 = '" & f.Name & "'" & _
" WHERE ファイル名 Is Null;", dbFailOnError
fso.MoveFile f.Path, destinationFolder 'ファイル移動
End If
Next
Set fso = Nothing
End Sub
DoCmd.RunSQL
でSQLを実行してもいいのですが、いちいち確認メッセージがでるので、それをオフにしておいた方がいいでしょう。CurrentDb.Execute
なら確認なしに実行します。
エラー処理は、まずは、これが正常に動作することを確認して、各コードの意味を理解してからでいいと思います。
一気に理解しようとしても混乱するように思いますがどうでしょうか。
通報 ...