Microsoft Access 掲示板

VBAでインポート処理ができたエクセルファイルのみ別フォルダへ移動したい / 11

21 コメント
views
4 フォロー
11

ここで取得したファイル名を保存してみましたが、うまく保存できませんでした。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なら確認なしに実行します。

エラー処理は、まずは、これが正常に動作することを確認して、各コードの意味を理解してからでいいと思います。
一気に理解しようとしても混乱するように思いますがどうでしょうか。

通報 ...