エクセルのVBAにて疑問点があり、ご指摘いただければ幸いです。 BACKUPというフォルダの中に testfile202204010900.xlsm
エクセルのVBAにて疑問点があり、ご指摘いただければ幸いです。 BACKUPというフォルダの中に testfile202204010900.xlsm testfile202204020900.xlsm testfile202204030900.xlsm... のようにファイルがあり、このファイルを今日の日から 30日たっていたら削除するコードを書いています。 下記まで書いたのですがステップインすると If f Like testfile & "_############." & xlsm Then の部分でEnd ifに移動してしまい、明らかにファイルの日付が30日前でも 削除されません。 どの部分が違っているかご指摘いただけないでしょうか。 また、最終的には.xlsmとなっている部分はアクセスのファイルを消す予定 なのですが、パスさえ合っていれば.xlsm の部分を .accdb に 変更すれば対応可能でしょうか。 Sub file_delete() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim delLastDay As String delLastDay = Format(Date - 30, "yyyymmdd") Const Path As String = "C:\test\BACKUP" Dim f As String f = Dir(Path & "\" & "*.xlsm") Do Until f = "" If f Like testfile & "_############." & xlsm Then If Mid(f, InStrRev(f, "_") + 1, 8) <= delLastDay Then On Error Resume Next Kill Path & "\" & f End If End If tFile = Dir() Loop Set fso = Nothing End Sub
Visual Basic | Excel・46閲覧・25
ベストアンサー
気になった点がいくつかあります。 ①まずFileSystemObject使っているなら、作成日付はFileSystemObjectで取得したファイルオブジェクト内のプロパティにあります。 質問者のコードでは、ファイル作成日はファイル名から取得しようとしていますけど、ファイル名の日付は作成日であると考えても大丈夫ですか? ②ファイル名から日付取得に Mid(f, InStrRev(f, "_") + 1, 8) していますが、ファイル名に「_」がないので、日付部分を取得できません。 「testfile」を取得しています。 testfile と delLastDayの日付部分の大小比較しているため、想定したものになっていない。 「testfile_202204020900.xlsm」のようなファイル名にするべきですね。 「_」がないならmid(replace(f,"testfile"),1,8)でいいかなと思います。 ③Do Loop中に「f」ファイル名を再取得することをしてません。 そのため最初のfをなんども繰り返すため無限ループになりませんかね? ループ中にPathのファイルをそれぞれ1回ずつ取得する必要があります。
回答ありがとうございます。 ①ファイル名から取得しようとしています。 ファイルはファイル名、年、月日、時間の形にしています。 ②すみません、_を記載し忘れていました。 実際のファイルは_があり testfile_202204030900.xlsm のようになっています。 ③ f = Dir(Path & "\" & "*.xlsm") Do Until f = "" tFile = Dir() この部分でfのフォルダにあるファイルを1件づつ入れる ようにしたつもりなのですが、この書き方だと再取得できていないでしょうか。
質問者からのお礼コメント
詳細なコードをいただきありがとうございました。 こちらコードを使用してやってみたいと思います。
お礼日時:5/19 17:22