ログアウト機能の設計と概要

メインメニューの「システムの終了」ボタンを押すと、ログアウトフォームがポップアップで表示されます。ログイン者の情報は自動で引き継がれるため、ログアウト操作はボタンを押すだけで完結します。ログアウト時間の記録・古いログデータの自動削除・Accessの終了まで、一連の処理をマクロが順番に実行します。

 

ログアウト画面(M90ログアウト)

メインメニューの「システムの終了」ボタンを押すとポップアップで表示されるフォームです。ログイン者の情報がそのまま表示されるため、ログアウト者の入力は一切不要です。

>>>オブジェクトの命名ルールはこちら

項目 内容
従業員コード・氏名 ログイン者の情報を自動表示。入力不要
ログアウトボタン Accessを終了するマクロを実行。ログアウト時間をテーブルに記録
閉じるボタン ログアウトをキャンセルしてメインメニューに戻る(M99共通)
ログイン中一覧ボタン 現在ログイン中のPCとユーザーを一覧で確認できる

デザインビューで見る仕組み

実行時には見えない非表示テキストボックスの配置を確認できます。ログイン者の情報を引き継ぐための仕組みと、ログアウト時間を記録するための仕組みがシンプルに並んでいます。

項目 種別 内容
従業員コード 非連結 メインメニューのログイン者から転記
氏名(青い非連結) 非連結・表示 従業員コードと連動してDLOOKUPで氏名を取得
ログアウト時間 非表示 ログアウトボタン押下時にNow()で日時を取得

ログアウト処理の流れ

ログアウトボタンを押したときのマクロが順番に処理を実行します。

  1. 従業員コードの未入力チェック
  2. ログイン者とログアウト者のコードが一致するか確認
  3. 「システムを終了してもいいですか?」メッセージを表示
  4. はい → ログアウト時間をNow()で非表示ボックスに取得
  5. メインメニューの「終了チェック」をTRUEに設定
  6. Q90ログアウト時間更新クエリを実行(ログアウト時間をテーブルに記録)
  7. Q90ログインデータ削除クエリを実行(180日以上前のデータを削除)
  8. Q90ログアウトデータ削除クエリを実行(180日以上前のデータを削除)
  9. Accessを終了

ログアウトマクロの構成(M90ログイン)

サブマクロの一覧

ログアウト機能に関わるサブマクロもM90ログインに集約しています。ログイン・ログアウトは一連の流れのため、同じメインマクロで管理しています。

サブマクロ名 実行タイミング 役割
ログアウト メインメニュー「システムの終了」ボタン・クリック時 ログアウトフォームを開き従業員コード・略称を転記
ログアウト従業員コード F90ログアウト・従業員コード欄・更新後処理 氏名をDLOOKUPで取得して表示
メインメニュー閉じる F90ログアウト・ログアウトボタン・クリック時 ログアウト処理全体を実行してAccessを終了
ログイン中 F90ログアウト・ログイン中一覧ボタン・クリック時 ログイン中一覧フォームを開く
閉じる(M99共通) F90ログアウト・閉じるボタン・クリック時 カレントフォームを閉じてメインメニューに戻る

システムの終了ボタン(ログアウトフォームを開く)

メインメニューの「システムの終了」ボタンを押したときに実行されます。ログアウトフォームを開き、メインメニューのログイン者情報を転記します。

サブマクロのテキスト表示
サブマクロ:システム終了

フォームを開く(F90ログアウト, フォームビュー, 標準)
値の代入:[Forms]![F90ログアウト]![従業員コード]
    = [Forms]![F00メインメニュー]![従業員コード]
値の代入:[Forms]![F90ログアウト]![略称]
    = DLookUp("略称","T01従業員M",
      "[従業員コード] = [Forms]![F90ログアウト]![従業員コード]")
マクロの中止
処理 内容
フォームを開く F90ログアウトをフォームビューで表示
従業員コード転記 メインメニューのログイン者コードをログアウトフォームに転記
略称取得 DLOOKUPで従業員マスタから略称を取得して転記

マクロの設置場所

項目 内容
フォーム F00メインメニュー
コントロール システムの終了ボタン
イベント クリック時
呼び出し元 M90ログイン.システム終了

 

従業員コードの更新後処理(ログアウト従業員コード)

従業員コード欄が更新されたときに実行されます。コードに対応する氏名をDLOOKUPで取得して青い非連結ボックスに表示します。

サブマクロのテキスト表示
サブマクロ:ログアウト従業員コード

値の代入:[Forms]![F90ログアウト]![略称]
    = DLookUp("略称","T01従業員M",
      "[従業員コード] = [Forms]![F90ログアウト]![従業員コード]")
マクロの中止
処理 内容
氏名取得 DLOOKUPで従業員マスタから略称を取得して表示欄に反映

マクロの設置場所

項目 内容
フォーム F90ログアウト
コントロール 従業員コード欄
イベント 更新後処理
呼び出し元 M90ログイン.ログアウト従業員コード

 

ログアウトボタンの処理(メインメニュー閉じる)

ログアウトボタンを押したときに実行されます。未入力チェック・本人確認・終了確認を経てログアウト処理を実行し、Accessを終了します。

サブマクロのテキスト表示
サブマクロ:メインメニュー閉じる

If IsNull([従業員コード]) Then
    メッセージボックス(従業員コードが空欄です。従業員コードを入力してください。)
    コントロールの移動(従業員コード)
    マクロの中止

If [Forms]![F90ログアウト]![従業員コード]
    <> [Forms]![F00メインメニュー]![従業員コード] Then
    メッセージボックス(ログイン者とログアウト者が違います。ログイン者でログアウトしてください。)
    コントロールの移動(従業員コード)
    マクロの中止

警告音
If MsgBox("販売・生産管理システムを終了してもいいですか?",4+32,"システムの終了") = 6 Then
    値の代入:[Forms]![F90ログアウト]![ログアウト時間] = Now()
    値の代入:[Forms]![F00メインメニュー]![終了チェック] = True
    メッセージの設定(いいえ)
    クエリを開く(Q90ログアウト時間更新, データシート, 編集)
    クエリを開く(Q90ログインデータ削除, データシート, 編集)
    クエリを開く(Q90ログアウトデータ削除, データシート, 編集)
    Accessの終了(すべて保存)

Else
    メッセージボックス(システムの終了を中止します。)
    ウィンドウを閉じる(フォーム, F90ログアウト, 確認)
    マクロの中止
処理 内容
未入力チェック 従業員コードが空の場合はメッセージを表示して中止
本人確認 ログイン者とログアウト者のコードが一致するか確認
終了確認 MsgBoxで「終了してもいいですか?」を表示
ログアウト時間取得 Now()で現在日時を非表示ボックスに代入
終了チェック設定 メインメニューの終了チェックをTRUEに設定
クエリ実行 ログアウト時間記録・ログデータ削除を順番に実行
Access終了 すべて保存してAccessを終了
キャンセル時 中止メッセージを表示してログアウトフォームを閉じる

マクロの設置場所

項目 内容
フォーム F90ログアウト
コントロール ログアウトボタン
イベント クリック時
呼び出し元 M90ログイン.メインメニュー閉じる

 

ログイン中一覧ボタン(ログイン中)

ログイン中一覧ボタンを押したときに実行されます。現在ログイン中の従業員一覧をポップアップフォームで表示します。

サブマクロのテキスト表示
サブマクロ:ログイン中

フォームを開く(F90ログイン中, フォームビュー, 標準)
マクロの中止
処理 内容
フォームを開く F90ログイン中をフォームビューで表示

マクロの設置場所

項目 内容
フォーム F90ログアウト
コントロール ログイン中一覧ボタン
イベント クリック時
呼び出し元 M90ログイン.ログイン中

 

閉じるボタン(M99共通)

M99共通マクロの閉じるサブマクロです。オブジェクトを指定せずカレントフォームを閉じるため、ログアウトフォーム以外でも多用しています。

サブマクロのテキスト表示
サブマクロ:閉じる(M99共通)

ウィンドウを閉じる
    オブジェクトの種類:(空欄)
    オブジェクト名:(空欄)
    オブジェクトの保存:確認
マクロの中止
処理 内容
ウィンドウを閉じる オブジェクト未指定でカレントフォームを閉じる
多用途 ログアウトフォーム以外でも共通して使用

マクロの設置場所

項目 内容
フォーム F90ログアウト
コントロール 閉じるボタン
イベント クリック時
呼び出し元 M99共通.閉じる

 

関連クエリの構成

ログアウト時間記録クエリ(Q90ログアウト時間更新)

T90ログインテーブルのログアウトフィールドを更新する更新クエリです。ログアウト時間がNullのレコード(未ログアウト)かつ対象の従業員コードを条件に絞り込んで更新します。

フィールド テーブル 内容
ログアウト T90ログイン レコードの更新:Forms![F90ログアウト]![ログアウト時間]
従業員コード T90ログイン 抽出条件:Forms![F90ログアウト]![従業員コード]
ログアウト T90ログイン 抽出条件:Is Null(未ログアウトのレコードのみ対象)

ログインデータ削除クエリ(Q90ログインデータ削除)

T90ログインテーブルのログインフィールドが180日以上前のレコードを削除する削除クエリです。蓄積し続けるログデータをログアウト時に自動で整理します。

フィールド テーブル 条件
ログイン T90ログイン < DateAdd(“d”,-180,Date())

 

ログアウトデータ削除クエリ(Q90ログアウトデータ削除)

T90ログインテーブルのログアウトフィールドが180日以上前のレコードを削除する削除クエリです。ログインデータ削除と合わせて実行して古いデータを一括整理します。

フィールド テーブル 条件
ログアウト T90ログイン < DateAdd(“d”,-180,Date())

 

ログイン中一覧クエリ(Q90ログイン中)

T01従業員MとT90ログインを結合し、ログアウトフィールドがNull(現在ログイン中)のレコードを抽出する選択クエリです。ログイン中一覧フォームのデータソースになります。

フィールド テーブル 条件
従業員コード T90ログイン
略称 T01従業員M
ログイン T90ログイン
ログアウト T90ログイン Is Null(ログイン中のみ)

ログイン中一覧フォーム(F90ログイン中)

現在ログイン中の従業員をリスト形式で確認できるポップアップフォームです。Q90ログイン中クエリをデータソースとして、従業員CD・略称・ログイン日時・ログアウト日時を表示します。

項目 内容
従業員CD ログイン中の従業員コード
略称 従業員マスタから取得した略称
ログイン ログイン日時
ログアウト ログアウト日時(ログイン中はNull・空欄)
最適化ボタン データベースを最適化
閉じるボタン フォームを閉じる(M99共通)

 

まとめ

ログアウト機能はシステム運用の出口として、ログイン者の記録を正確に締めくくる役割を担っています。本人確認・終了確認・ログアウト時間の記録・古いデータの自動削除まで、ボタン一つで順番に処理が完結します。また膨大になりがちなログデータを180日を基準に自動削除する設計により、手動でのメンテナンスが不要になっています。ログインからログアウトまでが一つの流れとして完結する設計です。

 

本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。

ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。