スポンサーリンク

VBAでログ機能を組み込む方法と設計パターン【Access上級者向け】

スポンサーリンク
Access
スポンサーリンク

こんにちは、なかぜんです。
Accessで業務アプリを開発していると、「あれ、誰がいつ何をしたんだっけ?」「エラーの発生源がわからない…」なんて場面に出くわしたことはありませんか?

今回は、そんな「見えない操作」や「突発エラー」を見える化してくれるログ機能の実装について、VBAでの組み込み方法と設計パターンをわかりやすく解説していきます。

ログをうまく活用することで、運用トラブルの早期発見や、業務の透明性向上にもつながりますよ。

スポンサーリンク

1. ログ機能って何のため?

Accessでのログ機能とは、ユーザーの操作や処理の結果を記録しておく仕組みです。
主に以下のような用途があります:

  • エラー発生時の原因追跡
  • 操作履歴の確認(いつ誰が何をしたか)
  • 処理実行の記録(バッチ処理・更新など)

とくに複数人で使う業務DBでは、ログは保険のような存在になります。

2. ログ機能の設計パターン

2-1. ログを保存するテーブルを用意

まずは記録先となるログテーブル「T_ログ」を作成します。

フィールド構成例:
・ログID(オートナンバー・主キー)
・記録日時(Date/Time)
・ユーザー名(Short Text)
・処理内容(Short Text)
・詳細情報(Long Text)

2-2. ログ書き込み用の共通関数を作成

モジュールに以下のような関数を用意すると、どこからでもログ出力できます。

Public Sub WriteLog(ByVal action As String, Optional ByVal detail As String = "")

    On Error GoTo Err_WriteLog

    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb
    Set rs = db.OpenRecordset("T_ログ", dbOpenDynaset)

    rs.AddNew
    rs!記録日時 = Now
    rs!ユーザー名 = Environ("USERNAME")
    rs!処理内容 = action
    rs!詳細情報 = detail
    rs.Update

    rs.Close
    Set rs = Nothing
    Set db = Nothing

    Exit Sub

Err_WriteLog:
    MsgBox "ログ書き込みに失敗しました:" & Err.Description, vbExclamation
End Sub

解説:
この関数は「処理名」と「詳細情報」を渡せばログを自動記録します。
ユーザー名はWindowsログイン名(Environ関数)を取得しています。

2-3. 呼び出し側はとてもシンプル

たとえば更新ボタンを押した時のイベントに、こんな1行を追加するだけでOKです:

Call WriteLog("顧客データ更新", "顧客ID=123")

これで「いつ・誰が・何をしたか」が記録されます。

3. エラー時の自動記録パターン

エラー時にログを出すようにすれば、障害調査がグッと楽になります。

Sub SampleProc()

    On Error GoTo Err_Handler

    ' 通常処理
    ' ...

    Exit Sub

Err_Handler:
    WriteLog "エラー発生", "ErrNo=" & Err.Number & "|" & Err.Description
    MsgBox "エラーが発生しました:" & Err.Description

End Sub

ポイント: エラー発生の直後にログを記録することで、タイムスタンプ付きの証跡が残せます。

4. よくあるミスと注意点

  • テーブルの排他ロックに注意:ログテーブルにロックがかかっているとログ記録に失敗することがあります。
  • ログ肥大化対策:データ量が多くなる場合は、定期的な削除・アーカイブが必要です。
  • エラー時の無限ループに注意:ログ記録処理自体でエラーが出た場合に無限ループしないよう、エラー処理にはMsgBoxで抜けましょう。

5. 応用テクニック

5-1. 操作対象テーブルと連携する

更新対象のレコードIDなどを含めれば、より詳細な操作ログになります。

WriteLog "商品在庫更新", "商品ID=456, 在庫数=100 → 120"

5-2. ログをフォームに表示する

ログテーブルを基にした連続フォームを作れば、「操作履歴一覧画面」として活用できます。

5-3. テーブルをCSVとしてエクスポート

定期的にログをCSVでバックアップしたり、メール添付で送信するなどの自動化も可能です。

6. まとめ:自作ログ機能で業務改善へ

今回はVBAでログ機能を組み込む方法と、実務向けの設計パターンについてご紹介しました。

  • ログ機能は「見えない動き」を可視化してくれる保険のようなもの
  • 記録先テーブル+共通関数で簡単に導入可能
  • エラー対応や業務追跡に役立つ

今後は以下のようなステップにもチャレンジしてみてください:

  • ログ閲覧専用の管理者画面を作る
  • ログを使ったユーザー監視やアラート通知
  • ファイル出力や外部サービスとの連携(Power Automateなど)

ちょっとした工夫で、Accessアプリの信頼性はぐっと向上します。
ぜひ今回の内容をベースに、業務に合ったログ機能を取り入れてみてくださいね。

それではまた、次回の記事でお会いしましょう!