|
初心者 さん、こんばんわ。
>ここで伺う質問ではないかも知れませんが、当方Excelに詳しく
>無いもので、ご指導を賜りたいと思います。
エクセルの起動(単一PC)の記録を取るならこんな感じです。
詳しくない人に紹介するのもアレな内容になってしまいますが。
1. ↓以下をThisworkbookに記述します。
Option Explicit
Private WithEvents app As Application
'シート(ログ)に転記
Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
If Wb.Name <> ThisWorkbook.Name Then
Log_Edit Wb.FullName, "Close" '実働部分は別Sub
End If
End Sub
'シート(ログ)に転記
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
If Wb.Name <> ThisWorkbook.Name Then
Log_Edit Wb.FullName, "Open" '実働部分は別Sub
End If
End Sub
'Open_Close共通処理
Private Sub Log_Edit(arg1 As String, arg2 As String)
'arg1:フルパスファイル名 arg2:処理状況
Dim r1 As Range
With Application.ThisWorkbook.Worksheets(1)
Set r1 = .Range("A65536").End(xlUp).Offset(1, 0)
If r1.Row = 10002 Then
LogDataFile '10000件で強制ログクリア
Set r1 = .Range("A2")
End If
r1.Value = arg1
r1.Offset(0, 1).Value = Now
r1.Offset(0, 2).Value = arg2
End With
End Sub
'かならず上書き(念のためウィンドウは非表示)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
.Windows(1).Visible = False
.Save
End With
End Sub
'ブックオープン時のイベント
Private Sub Workbook_Open()
Set app = Application
With Application.Workbooks
If .Count = 1 Then .Add
End With
End Sub
'ログを表示したいときに、手動で実行してください。
'カレントフォルダ(ツール→オプション→全般)に保存されます。
Private Sub LogDataFile()
Dim II As Long, Imax As Long, ofile As String
With Application
'フルパスファイル名
ofile = .DefaultFilePath & .PathSeparator & Format(Now(), "eemmddhhmm") & ".csv"
End With
With ThisWorkbook.Worksheets(1)
Imax = .Range("A65536").End(xlUp).Row
'ログ出力
Open ofile For Output As #2
For II = 2 To Imax
Print #2, .Cells(II, 1).Value; ","; .Cells(II, 2).Value; ","; .Cells(II, 3).Value
Next
Close #2
'ログクリア
.Columns("A:C").ClearContents
End With
End Sub
2. VBAProjectをパスワードでロックします。
3. 適当に名前をつけて保存し、エクセルを終了します。
4. XLStartフォルダにこのブックを入れると、起動時に読み込まれます。
ブックを開いたり閉じたりする度にログが記録されます。
ログクリアは1万件に1回ファイルを出力するようにしていますが、必要に応じてVBAProjectのパスを解除してコードを表示し、LogDataFileを実行してください。
なお、ログファイルはカレントフォルダにcsv形式で出力されます。
意味が違ってたらごめんなさい。
|
|