初心者
2023/01/10 (火) 20:09:50
ddef7@7bb1a
私が悩んでいる間にいろいろと考えていただきありがとうございます。
なんとなく同じようになりましたが、拡張子を限定するやり方は勉強になりました。ありがとうございます。
今日作ったものに追加してみます。
ここで取得したファイル名を保存してみましたが、うまく保存できませんでした。SQLで追加してみましたが、インポートしたレコードではなく、別のレコードとして保存されてしまいました。
Set fso = New FileSystemObject ' インスタンス化
Dim fl As Folder
Set fl = fso.GetFolder("C:\アクセス\エクセル\") ' フォルダを取得
Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
Debug.Print (f.Name) ' ファイルの名前 (Tips.txt) など
Debug.Print (f.Path) ' ファイルのパス (D:\Tips.txt) など
Dim dname As String
Dim fname As String
Dim tblname As String
Dim sname As String
dname = "C:\アクセス\エクセル\" 'エクセルファイルの保存フォルダ、適宜変更する。
tblname = "テーブル名" '取り込み先テーブル名、適宜変更する。
fname = f.Path 'エクセルファイル名を指定する場合*で挟む、適宜変更する。
sname = "sheet3!"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, tblname, fname, True, sname
DoCmd.RunSQL "insert into T3(ファイル名) VALUES('" & f.Name & "');"
Dim sourceFile As String
Dim destinationFolder As String
sourceFile = f.Path
destinationFolder = "C:\アクセス\エクセル\処理済\"
fso.MoveFile sourceFile, destinationFolder
Next
' 後始末
Set fso = Nothing
DoCmd.SetWarnings False
hirotonさんエラー処理のことを考えていただいてありがとうございます。
難しいので、教えていただいたことをよく読んで試してみます。
よくわかっていないのですが、教えていただいたコードの中で
インポート成功 = Err.Number = 0
というのは正常に処理ができた(0はエラーが発生していない)ということなのでしょうか?
初歩的な質問ですいません。
よろしくお願いします。
こんなにいろいろ教えていただけるとは思っていなかったので、本当にうれしいです。ありがとうございます。
通報 ...
Err オブジェクト
Err.Number
は「リセット時に0」になります。その後、「エラーの発生がなければ0のまま」です。ただし、エラーが複数回発生した場合は「最後のエラー」情報になっていることに注意が必要ですOn Error Resume Next
を使ったエラー対策は、これらをしっかりと把握している必要があるということです。提示したコードはサンプルの為、できるかぎりエラートラップに焦点を絞って記述しています
エラーの結果を変数(
インポート成功
)に取っているのもエラートラップに焦点を絞るためで、適切に処理できているならばのように、エラートラップ内で処理すればいいでしょう