業務自動化の極意:Accessで「放置されたセッション」を強制終了する極限の実装術
こんにちは。現場の最前線でAccessを叩き込み、泥臭い自動化からアーキテクチャ設計までをこなしてきたエンジニアです。
今回は、Access業務アプリのセキュリティにおける「最後の一線」とも言える自動ログアウト機能について解説します。
「席を立ったままPCを放置して離席してしまう……」
これは情報漏洩の大きなリスクです。Accessの標準機能である`TimerInterval`と`OnTimer`を使い、これをプロフェッショナルな品質で制御する方法を伝授しましょう。
—
1. なぜ「タイマー」が必要なのか?(オブジェクトの核心)
Accessのフォームには`TimerInterval`というプロパティがあります。これは「何ミリ秒ごとに『OnTimerイベント』という合図を出すか」を決める心臓部です。
- TimerInterval(整数): 1000を設定すれば、1秒ごとにOSから「時間が来たよ」と信号が送られます。
- OnTimerイベント: その信号を受け取った瞬間に実行される「台本(VBAコード)」です。
これを組み合わせることで、「最後に操作してから○分経過したら、強制的にアプリを閉じる」という監視システムが作れます。
—
2. 実装のステップ:魂を込めたコード設計
この実装の肝は、「操作のたびにタイマーをリセットする」という考え方です。
手順1:メインフォームの設定
すべての画面に共通して表示されているメインメニュー(またはベースとなるフォーム)を開き、プロパティシートで以下を設定します。
- タイマー間隔 (TimerInterval): 60000(1分ごとにチェック)
- タイマー時 (OnTimer): `[イベント プロシージャ]`
手順2:VBAコードの記述
以下のコードを、フォームのモジュールに記述してください。
Option Compare Database
Option Explicit
‘ 最後に操作が行われた時刻を保持する変数
Private LastActionTime As Date
‘ フォームが開いた時に時刻を初期化
Private Sub Form_Open(Cancel As Integer)
LastActionTime = Now()
End Sub
‘ 1分ごとに呼び出されるタイマー処理
Private Sub Form_Timer()
‘ タイムアウト設定(例:15分放置でログアウト)
Const TimeoutMinutes As Integer = 15
‘ 現在時刻と最後に操作した時刻の差を計算
If DateDiff(“n”, LastActionTime, Now()) >= TimeoutMinutes Then
MsgBox “長時間操作がないため、自動的に終了します。”, vbExclamation, “セッションタイムアウト”
‘ 全てのフォームを閉じてアプリケーションを終了
DoCmd.Quit acQuitSaveNone
End If
End Sub
‘ フォーム内のどこかをクリックした時に「操作した」とみなす
Private Sub Form_Click()
LastActionTime = Now()
End Sub
‘ フォーム上のコントロールを操作した時もリセット
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
LastActionTime = Now()
End Sub
—
3. 伝説のエンジニアからの「極限のアドバイス」
初学者がここで陥りやすい罠が2つあります。ここをクリアすれば、あなたはもう脱初心者です。
罠1:MouseMoveに頼りすぎない
上記の例では`MouseMove`を使っていますが、これだけだと「フォームの余白」でしか反応しません。業務アプリの場合、「各ボタンやテキストボックスのクリックイベント」にも `LastActionTime = Now()` を仕込むのが鉄則です。
※大規模なアプリなら、クラスモジュールを使ってイベントを横取り(WithEvents)する手法がエレガントですが、まずはここから始めましょう。
罠2:デバッグ中はオフにする
`DoCmd.Quit` が入ったコードをテスト中に、うっかり15分放置すると本当にAccessが落ちます。開発中は `MsgBox “ログアウト処理が走りました”` と表示するだけに留め、運用開始直前にQuitコマンドを有効にするのが「転ばぬ先の杖」です。
—
まとめ:自動化は「安心」を作る仕事
自動ログアウト機能は、ただの便利機能ではありません。「ユーザーが意識せずとも、セキュリティが担保されている」という状態を作ることこそが、エンジニアの最大の価値です。
- `TimerInterval` は心臓の鼓動(ミリ秒単位)。
- `OnTimer` はその鼓動に応じたアクション。
- `LastActionTime` で「最後の操作」を刻み続ける。
この3つのピースを理解すれば、Access VBAのフォーム操作は完全にあなたの掌の中にあります。
さあ、あなたのAccessアプリに「守りの知性」を組み込んでみてください。もし分からないことがあれば、いつでもまた聞きに来てください。応援していますよ。
