Microsoft Access 掲示板

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

21 コメント
views
4 フォロー
14
初心者 2023/01/11 (水) 21:53:07 ddef7@7bb1a

エラー処理のやり方がこんなにあるとは知りませんでした。もっと勉強してみます。
今回教えていただいたコードでやりたかったことがほとんどできている感じがします。
ありがとうございます。
CurrentDB.Executeでもsqlが実行できるんですね。しかも確認無しで。勉強になりました。
教えていただいたコードの中にエラー内容を別テーブル(T3)に保存するコードを追加してみたのですが、err.descriptionだけが保存できませんでした。ファイル名とエラー番号がわかるだけでもすごく助かりますが、エラー内容も一緒に保存出来たらもっとありがたいのですが、可能でしょうか?
データ型を長いテキストにしてみたのですが、やはり保存されませんでした。(イミディエイトウィンドウには出てきてるのですが)エラー番号は3011でした。

    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)                ' フォルダを取得
    
    On Error Resume Next 'エラーが発生した場合無視して次の行へ
    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
            If Err.Number = 0 Then               'エラーなくインポートされた
                CurrentDb.Execute "UPDATE T2 SET ファイル名 = '" & f.Name & "'" & _
                              " WHERE ファイル名 Is Null;", dbFailOnError
                fso.MoveFile f.Path, destinationFolder 'ファイル移動
            End If
            If Err.Number <> 0 Then 'エラー発生
                'とりあえずイミディエイトにファイル名、エラーメッセージを出力
            Debug.Print f.Name & " " & Err.Number & ":" & Err.Description
            CurrentDb.Execute "insert into T3(ファイル名,エラー番号,エラー内容) VALUES('" & f.Name & "','" & _
		Err.Number & "','" & Err.Description & "');", dbFailOnError
            
            
            Err.Clear
            End If
        End If
                    
    Next
    On Error GoTo 0 'エラー処理を無効にする

    Set fso = Nothing
通報 ...