どっかの誰かが作ったAccessのVBAで、ありがちだけどコードにSQLが大量に記述されてしかもループや配列の中身を項目名にしてるSQLなもんだから、一見みただけだと変数だらけでなにやってるかまったく理解不能のSQLなのでDebug.Printで出さざるを得ない状態になったんだけど、ログに吐き出せないしDebug.Printって何度も書くの地獄だったので、ファイルにログ吐き出すクソコード書いた。
新しいモジュール作ってドバっとコピペすれば動く。
Const pDisable As Boolean = False Public Sub p(ByVal vData As Variant, Optional indent As Integer = 0, Optional ByVal bFlg As Boolean = False) If pDisable = True Then Exit Sub Dim i As Integer Dim tabstr As String: tabstr = "" Do Until i >= indent tabstr = tabstr & vbTab i = i + 1 Loop If bFlg = True Then Call WriteLog(tabstr & vData) Else Debug.Print tabstr & vData End If End Sub Private Sub WriteLog(ByVal vData As Variant) On Error GoTo Catch Dim fso As Object Dim fsoTxt As Object Dim bOpend As Boolean: bOpend = False Dim sLogFile As String: sLogFile = CurrentProject.Path & "\" & Environ("COMPUTERNAME") & "_" & Replace(Date, "/", "-") & ".txt" Const ForReading = 1, ForWriting = 2, ForAppending = 8 Set fso = CreateObject("Scripting.FileSystemObject") Set fsoTxt = fso.OpenTextFile(sLogFile, ForAppending, True): bOpend = True fsoTxt.Writeline vData fsoTxt.Close: bOpend = False Exit_WriteLog: If bOpend Then fsoTxt.Close End If Set fsoTxt = Nothing Set fso = Nothing Exit Sub Catch: Resume Exit_WriteLog End Sub
こんなコード書くと
p "START" p "てすと", 1 p "てすと", 2 p "てすと", 3 p "END"
イミディエイトウィンドウにこんな感じで出る。
START てすと てすと てすと END
最後の引数をTrueにすればログ吐くし、リリースするときいらなければpDisableをTrueにしとけば吐き出さない。
基本的にデバッグの時にしか使わないコードなのでデフォルトをPrintなのかファイルなのかは使う人がハードコーディングで好きに変えればいいと思う。