[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の利用でも触れましたが、まず考えられる処理を関数として先行して実装し、その後メインルーチンを書いたたほうがよいかと思います。