忍者ブログ

マクロの実行ログを保存するツール

2021年10月26日
マクロに限らず、めっちゃ検討して作ったものより
とりあえずで作って改良を重ねたものの方が
便利で使いやすかったりする。



マクロだと、どれが一番使われている?


それを調べるため、ログを出力するマクロを作ってみた。


手順はざっと以下のとおり。

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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字