結構な件数のデータを一度にデバッグで吐き出したかったけどイミディエイトウインドウの制限に引っかかって出力しきれなかったのでファイルに書き出したりするやつを用意した。
'/** ' * OutputLog ' * デバッグログをファイルに出力する ' * @param varData : 出力対象のデータ ' * @param Optional strFileNm :(出力ファイル名を指定する場合)ファイル名 ' * @param Optional lngDebugFLG :(0=デバッグ・ファイル出力,1=デバッグのみ出力,2=ファイルのみ出力) ' */ Public Sub OutputLog(ByVal varData As Variant, _ Optional ByVal lngDebugFLG As Long = 1, _ Optional ByVal strFileNm As String = "") Dim lngFileNum As Long Dim strLogFile As String 'ファイル出力対象の場合 If lngDebugFLG = 0 Or lngDebugFLG = 2 Then ' ファイル名の指定がない場合、現在の年月日をファイル名とする ' 引数のファイル名に拡張子が存在しない場合、拡張子を付加する If strFileNm = "" Then strFileNm = Format(Now(), "yyyymmdd") & ".txt" ElseIf InStr(strFileNm, ".txt") = 0 Then strFileNm = strFileNm & ".txt" End If ' 出力先ファイル設定 ' Accessで利用する場合はCurrentProjectオブジェクトを使う ' strLogFile = CurrentProject.Path & "\" & strFileNm strLogFile = ActiveWorkbook.Path & "\" & strFileNm lngFileNum = FreeFile() Open strLogFile For Append As #lngFileNum Print #lngFileNum, varData Close #lngFileNum End If 'デバッグログ出力対象の場合 If lngDebugFLG = 0 Or lngDebugFLG = 1 Then Debug.Print varData End If End Sub
使用例
Sub test() OutputLog "test" 'イミディエイトウィンドウにのみ出力 OutputLog "test1", 0, "testfile1" 'ファイル・イミディエイトウインドウに出力 OutputLog "test2", 1, "testfile2" 'ファイル名が指定されているがイミディエイトウインドウのみ OutputLog "test3", 2, "testfile3" '指定されたファイルのみ出力 End Sub
実際に使うときは、第二引数を定数かなんかで管理しとくと一括でテスト用に置き換えられていいかも。