AccessのVBAでフォルダー内ハウスキープ(古いファイルを自動削除)関数
ハウスキープってなんぞ?
- ログファイル
- バックアップとして自動で出力したPDFやCSVファイル
なんかがずーっと貯まり続けてストレージを圧迫しないように、古いやつを消す処理のこと。
参照設定
この記事の例は FileSystemObject クラスを使うので、VBEの参照設定で Microsoft Scripting Runtime にチェックを入れる必要があります。
指定フォルダー内の古いファイルは全て削除、サブフォルダーは即滅殺関数
『フォルダーパス』と『ファイルは何日間保存するか』を引数としてもらいます。
Public Function file_housekeep(ByVal folder_path As String, ByVal save_days As Long)
Dim fso_ As New FileSystemObject
Dim file_ As file
For Each file_ In fso_.GetFolder(folder_path).Files
If file_.DateCreated < DateAdd("d", -1 * save_days, Now()) Then
fso_.DeleteFile (file_.Path)
End If
Next
Dim folder_ As Folder
For Each folder_ In fso_.GetFolder(folder_path).SubFolders
fso_.DeleteFolder (folder_.Path)
Next
End Function
- 拡張子は考慮しません。
- サブフォルダーはイレギュラーとし、作成日に寄らず即削除します。(サブフォルダー内にさらにサブフォルダーやファイルがある場合は再帰的に削除されます)
- 削除判定の閾値はそこまで厳密にしていません。(コードの読みやすさ優先)
蛇足
『指定拡張子のみ削除』『サブフォルダー内のファイルについても再帰的に作成日をチェックして…』
などなど、細かく指定しようと思えばいくらでもできるけど、引数が多くなるし処理も複雑になってコードを理解するのに時間がかかるん… 。
CSVならCSV用のフォルダに出力!ログならログのフォルダに出力!
そして、出力フォルダ内のファイルはとにかく一定期間過ぎたら消える!
…というように 仕様はできる限りシンプルに した方がいいと思います。
(サブフォルダーを即削除するかはちょっと迷うところです)
バージョン
Windows10 Pro バージョン1909 OSビルド19042.630
Access for Microsoft 365 MSO(16.0.13328.20334)32ビット
Author And Source
この問題について(AccessのVBAでフォルダー内ハウスキープ(古いファイルを自動削除)関数), 我々は、より多くの情報をここで見つけました https://qiita.com/waokitsune/items/ff3db68a00db871d85f7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .