マクロの実行ログを保存するツール
2021年10月26日
マクロに限らず、めっちゃ検討して作ったものより
とりあえずで作って改良を重ねたものの方が
便利で使いやすかったりする。
マクロだと、どれが一番使われている?
それを調べるため、ログを出力するマクロを作ってみた。
手順はざっと以下のとおり。
1.ログファイルがなければ作る
2.ログファイルを追記モードで開く
3.テキストを書き込んで閉じる
ほら、めっちゃ簡単!
ログファイルがなければ作るモジュールについては、
フルパス指定で一発で作れるように細工をした。
https://aki.p-kin.net/Entry/96/
フラグでファイルを作ったかわかるようにして、
作った場合は、タイトル行を書き込む仕様にした。
(作っといてあれだけど、集計側マクロとの兼ね合いでいらねーかも)
自作したプロシージャの1行目に以下のログを仕込めば
ログをためることができる。
以下、ソース。
とりあえずで作って改良を重ねたものの方が
便利で使いやすかったりする。
マクロだと、どれが一番使われている?
それを調べるため、ログを出力するマクロを作ってみた。
手順はざっと以下のとおり。
1.ログファイルがなければ作る
2.ログファイルを追記モードで開く
3.テキストを書き込んで閉じる
ほら、めっちゃ簡単!
ログファイルがなければ作るモジュールについては、
フルパス指定で一発で作れるように細工をした。
https://aki.p-kin.net/Entry/96/
フラグでファイルを作ったかわかるようにして、
作った場合は、タイトル行を書き込む仕様にした。
(作っといてあれだけど、集計側マクロとの兼ね合いでいらねーかも)
自作したプロシージャの1行目に以下のログを仕込めば
ログをためることができる。
★WriteLog(プロシージャ名)ちなみに、自分のログは、圧倒的にオートフィルタマクロが1位でした。
以下、ソース。
共通モジュールを★で始めるルールにしたら、
必要なモジュールを集めやすくなった!
Public Sub ★WriteLog(msg As String)
'2021/10/26 22:09:11 v1
Const strPATH = "\Documents\WorkLog"
Dim UserName As String: UserName = ★ユーザー名取得
Dim PathName As String: PathName = "C:\Users\" & UserName & strPATH
Dim FileName As String: FileName = PathName & "\Report.log"
'Debug.Print FileName
Dim mkFlag As Boolean
Call ★txtファイルがなければ作る(FileName, mkFlag)
Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim LOG As Object: Set LOG = FSO.OpenTextFile(FileName, 8) ''追記(8)で開きます
''日時+タブ+メッセージを書き込みます(ファイル作成時はタイトルも)
If mkFlag = True Then LOG.WriteLine "日時" & vbTab & "msg" & vbTab & "bookName" & vbTab & "book.Path"
LOG.WriteLine Now & vbTab & msg & vbTab & ActiveWorkbook.Name & vbTab & ActiveWorkbook.Path
LOG.Close: Set LOG = Nothing: Set FSO = Nothing
End Sub
Function ★ユーザー名取得()
With CreateObject("WScript.Network")
★ユーザー名取得 = .UserName
End With
End Function
Sub ★txtファイルがなければ作る(FulName As String, Optional ByRef mkFlag As Boolean)
With CreateObject("Scripting.FileSystemObject")
Dim tmp, j As Long, strPATH As String
tmp = Split(FulName, "\")
For j = 0 To UBound(tmp)
If j = 0 Then
strPATH = strPATH & tmp(j) & "\"
ElseIf j <> UBound(tmp) Then 'フォルダ
strPATH = strPATH & tmp(j) & "\"
If .FolderExists(strPATH) = False Then .CreateFolder strPATH
Else 'ファイル作成
If .FileExists(FulName) = False Then
.CreateTextFile FulName
mkFlag = True
End If
End If
Next j
End With
End Sub
PR
Comment