投稿/コメントを表示します。

田中 宏明さんの投稿

(投稿ID: 4234)

マクロを実行しながら、ログ出力することに成功しました。
出力結果とコードの一部です。素晴らしいです。

2018/12/01 13:37:09, [INFO] , --------------- ログファイルオープン ---------------
2018/12/01 13:38:04, [ERROR] , エラー番号:-2147023783/種類:Unicode 文字のマッピングがターゲットのマルチバイト コード ページにありません。
2018/12/01 13:41:19, [INFO ] , ---------------正常終了 ---------------
'*************************************************************
'クラスモジュール
'logフォルダを作成してテキストファイルにログ出力
'*************************************************************
Option Explicit
'-------------------------------------------------------------
'モジュールレベル変数定義
'-------------------------------------------------------------
Private txt As TextStream

'-------------------------------------------------------------
' 名 称 : Class_Initialize
' 機 能 : コンストラクタ
' 引 数 : なし
' 戻 値 : なし
'-------------------------------------------------------------
Private Sub Class_Initialize()

    'インスタンス生成時に追記モードでログファイルオープン
    Dim logPath As String
    logPath = ThisWorkbook.path & "\log"
    
    'ログフォルダが無ければ作成
    Dim objFSO As FileSystemObject
    Set objFSO = New FileSystemObject
    If objFSO.folderexists(folderspec:=logPath) = False Then
        objFSO.createfolder logPath
    End If

    Dim filePath   As String
    filePath = logPath & "\" & "VBA_" & Format(Date, "yyyymmdd") & ".log"

    'TextStreamの追記モードでオープン
    Set txt = objFSO.OpenTextFile(Filename:=filePath, IOMode:=ForAppending, Create:=True, _
        Format:=TristateUseDefault)
    
    Set objFSO = Nothing

End Sub

'-------------------------------------------------------------
' 名 称 : Class_Terminate
' 機 能 : デストラクタ
' 引 数 : なし
' 戻 値 : なし
'-------------------------------------------------------------
Private Sub Class_Terminate()
    'インスタンス解放時ログファイルクローズ
    txt.Close
    Set txt = Nothing
End Sub

'-------------------------------------------------------------
' 名 称 : writeLog
' 機 能 : ログ出力
' 引 数 : level     :ログレベル("INFO " or "ERROR")
'          message   :メッセージ
' 戻 値 : なし
'-------------------------------------------------------------
Public Sub writeLog(ByVal level As String, _
                    ByVal message As String)
    'ログ作成
    Dim buf As String
    buf = Format(Now, "yyyy/mm/dd hh:nn:ss") '時間
    buf = buf & ", [" & level & "] "         'ログレベル
    buf = buf & ", " & message               'メッセージ
    '出力
    txt.WriteLine buf
End Sub

2018/12/01 23:17