[VBA]基本関数(ログファイルの削除)

 ログファイルの場合、古いログファイルが残っているケースでは削除し、1から生成したい場合があります。ファイルが削除できないまま処理を進めるとログが記録されないなどの問題が生じるためです。
 そのため、単にファイルを削除するのではなく、ログファイルが削除できないケースも処理として含めるべきかと思います。これに対応したコードはFunctionとして共通化すべきかと思います。
 コードとして以下となるかと思います。フォルダが深くても動くようにfsoで記述していますので、Microsoft Scripting Runtimeを前提としています。

Function DeleteLogFileIfNotOpen(filePath As String) As Boolean
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    
    If fso.FileExists(filePath) Then
        On Error Resume Next
        Dim file As TextStream
        Set file = fso.OpenTextFile(filePath, ForReading, False, TristateFalse)
        
        If Err.Number <> 0 Then
            MsgBox "ログファイルを閉じてください。", vbExclamation, "ファイル削除エラー"
            End ' プログラム全体を即座に中断
        Else
            file.Close
            fso.DeleteFile filePath
            DeleteLogFileIfNotOpen = True
        End If
        On Error GoTo 0
    Else
        DeleteLogFileIfNotOpen = True
    End If
    
    Set fso = Nothing
End Function

いかがでしたでしょうか。
いざプログラムを書くと安易に記述しがちで、メインルーチンが読みづらくなってしまいます。
あらかじめしっかりした関数を共有して呼び出すとメインルーチンがシンプルになるので、Chat GPTの利用でも触れましたが、まず考えられる処理を関数として先行して実装し、その後メインルーチンを書いたたほうがよいかと思います。

この記事が気に入ったらサポートをしてみませんか?