VBATips

共有のエクセルファイルを誰が開いたか記録する【ExcelVBA】

共有ファイルを誰が開いたかログを記録したい

Excelで情報共有や閲覧チェックなどを共有サーバーのエクセルファイルで管理するケースがあります。
その際、誰が開いたのか(誰がアクセスしたのか)を記録をすることで、
情報管理者は閲覧していない人物を判断する事が可能です。

ログ記録するサンプルコード


'■ファイルを起動時、誰がアクセスしたのかログを記録する。
'■ThiWorkbook内にコード記載する必要があります。
Private Sub Workbook_Open()

    Dim ws As Worksheet
    Dim lastRow As Long
    
    '■シート「Log」を変数に格納(マクロ実行前にシート「Log」を作成必要です)
    Set ws = ActiveWorkbook.Worksheets("Log")
    
    '■1列目(A列)の最終行+1を取得する
    lastRow = call_LastRow_ws(1, ws) + 1
    
    '■ブックをオープンした際、時刻、OS、PC名、ユーザー名を記録する
    ws.Cells(lastRow, 1) = Now()
    ws.Cells(lastRow, 2) = Environ("OS")
    ws.Cells(lastRow, 3) = Environ("COMPUTERNAME")
    ws.Cells(lastRow, 4) = Environ("USERNAME")
    
    ThisWorkbook.Save

End Sub


注意点

  • 共有サーバーのファイル内に記録を取ります。
    =ローカル環境にエクセルファイルをコピーされると、追う事ができません。(ログ履歴を残します)
  • 今回のコードだけでは動作しません。こちらの他シートの最終行を取得するマクロが必要です。
  • ログシートの存在を隠したい場合は、シート表示を「xlVeryHidden」にして非表示としましょう。
    シートが非表示でもマクロは動作します
  • Environ関数でPCの情報を取得可能です。詳細は別記事を参照してください。

関連記事

ExcelVBAマクロ「ワークシート名を変数にSetし、短い名前で利用する」★マクロ初級者必読-

ExcelVBAマクロ「最終行」「最終列」の判断処理をパーツ化する

ExcelVBAマクロ-他ブック他シートの「最終行」「最終列」取得処理をパーツ化する

コメント

タイトルとURLをコピーしました