hiko-blog

VBA業務改善

MENU

Excel-log履歴テキスト保存する

Option Explicit

’PERSONAL.XLSBのThisWorkbookへ保存


'// Excelのイベント検知
Dim WithEvents x    As Application

'// PERSONAL.XLSBが開いたとき
Private Sub Workbook_Open()
    '// Excelアプリケーションのイベントを検知する
    Set x = Application
End Sub

'// ブックが開いた場合
Private Sub x_WorkbookOpen(ByVal Wb As Workbook)
    Call OutputHistory(Wb, "Open")
End Sub

'// ブックを保存後
Private Sub x_WorkbookAfterSave(ByVal Wb As Workbook, ByVal Success As Boolean)
    '// 保存失敗時
    If Success = False Then
        Exit Sub
    End If
    
    Call OutputHistory(Wb, "Save")
End Sub

'// 履歴書き込み
Private Sub OutputHistory(ByVal Wb As Workbook, a_sType As String)
    Dim sNow    As String       '// タイムスタンプ
    Dim sPath   As String       '// ファイルパス
    Dim n       As Integer      '// ファイル番号
    
    'sPath = Application.DefaultFilePath & "\Excel-log.txt"
    sPath = "D:\Backup(XLSTART)\Excel-log.txt"
    
    '// 履歴ファイルが存在する場合
    If Dir(sPath) <> "" Then
        '// 履歴ファイル名が指定サイズを超過している場合
        If FileLen(sPath) > 100000 Then
            '// 履歴ファイル名をバックアップ名に変更
            Name sPath As sPath & Format(Now, "yyyymmdd-hhmmss")
        End If
    End If

    '// 現在日時を取得
    sNow = Format(Now, "yyyy/mm/dd hh:mm:ss")
    
    '// ファイル番号取得
    n = FreeFile
    
    '// 履歴ファイルを追加書き込みモードで開く
    Open sPath For Append As #n
    
    '// ブックのパスを書き込み
    Print #n, sNow & " [" & a_sType & "] " & Wb.FullName
    
    '// 履歴ファイルを閉じる
    Close #n
End Sub