0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AccessのVBAでフォルダー内ハウスキープ(古いファイルを自動削除)関数

Last updated at Posted at 2020-11-24

ハウスキープってなんぞ?

  • ログファイル
  • バックアップとして自動で出力したPDFやCSVファイル

なんかがずーっと貯まり続けてストレージを圧迫しないように、古いやつを消す処理のこと。

参照設定

この記事の例は FileSystemObject クラスを使うので、VBEの参照設定で Microsoft Scripting Runtime にチェックを入れる必要があります。
image.png
image.png

指定フォルダー内の古いファイルは全て削除、サブフォルダーは即削除

『フォルダーパス』と『ファイルは何日間保存するか』を引数としてもらいます。

Public Function 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ビット

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?