こんにちは、Accessブロガーの「なかぜん」です。
「ユーザーによって見せる画面を変えたいけど、どうすればいいの?」
こんなふうに悩んだこと、ありませんか?
たとえば、管理者には詳細な操作画面を、一般ユーザーには入力だけの画面を表示したい——そんなニーズに応えるのが「ユーザー別画面制御」です。
この記事では、Access初心者の方でも実践できるように、ログインユーザーの判別から、フォームの切り替え方、注意点や応用まで、丁寧に解説していきます!
ユーザー別画面制御って何をするの?
ざっくり言えば、「誰が使っているかを判別して、その人に合った画面(フォーム)を表示する仕組み」です。
こんなときに便利!
- 管理者だけに「設定フォーム」を表示
- パート社員には「入力画面」のみ見せたい
- 社内の担当者ごとに使う画面が違う
Accessはデータベースなので、ユーザー管理の仕組みと組み合わせることで、より安全で実用的なアプリが作れます。
ユーザーごとにフォームを切り替える方法
ステップ1:ユーザー一覧テーブルを作ろう
まずはユーザー情報を管理するテーブルを用意します。
テーブル名:T_ユーザー一覧
フィールド:
・ユーザー名(テキスト型)
・権限レベル(テキスト型:例「管理者」「一般」)
ここに、Accessを使う人の名前と、それぞれの権限を登録しておきます。
ステップ2:現在のユーザーを取得する
AccessにはWindowsログイン名を取得する関数があります。以下の関数をモジュールに作成してください。
Function GetUserName() As String
GetUserName = Environ("USERNAME")
End Function
この関数を使えば、起動している人のWindowsユーザー名が取得できます。
ステップ3:起動時にユーザーを判別してフォームを出し分け
「AutoExecマクロ」や「起動フォーム」に以下のようなVBAを設定します。
Private Sub Form_Load()
Dim strUser As String
Dim strRole As String
strUser = GetUserName()
' ユーザー情報を参照して権限レベルを取得
strRole = DLookup("権限レベル", "T_ユーザー一覧", "ユーザー名='" & strUser & "'")
Select Case strRole
Case "管理者"
DoCmd.OpenForm "F_管理者画面"
Case "一般"
DoCmd.OpenForm "F_一般画面"
Case Else
MsgBox "このユーザーは登録されていません。", vbExclamation
DoCmd.Quit
End Select
' このフォームは隠しておく
Me.Visible = False
End Sub
ポイント解説:
– GetUserName
関数でログインユーザーを取得します。
– DLookup
関数で、ユーザー一覧テーブルから該当ユーザーの権限レベルを取得します。
– 権限レベルに応じてフォームを出し分けています。
よくあるミスと注意点
- ユーザー名の入力ミス:Windowsのユーザー名とAccessのユーザー一覧が一致しないと判別できません。
- 権限フィールドが空:DLookupでエラーが出ることがあります。
- フォームを開いたあと、元のフォームを閉じない:不要なフォームが裏で残り、メモリ負荷になります。
応用ポイント:フォームを1つにして中身を変える
中級者向けのテクニックとして、1つのフォームを使って、表示項目やボタンを制御する方法もあります。
たとえば、以下のようにボタンの表示・非表示を切り替えます:
If strRole = "管理者" Then
Me.btn設定.Visible = True
Else
Me.btn設定.Visible = False
End If
このようにすれば、フォームを複数作る手間が省け、保守も簡単になります。
まとめ:ユーザー制御で業務効率がアップ!
今回は、Accessでユーザー別に画面を切り替える方法をご紹介しました。
この記事で学べたこと:
- ユーザー一覧テーブルで権限を管理する方法
- ログインユーザーを取得するVBA
- フォームの切り替えロジック
「Accessってここまでできるんだ!」と思っていただけたら嬉しいです。
次のステップとしては、ログイン画面の自作やユーザー別の操作ログ記録などもおすすめです。
今後も業務に役立つAccess活用術をお届けしますので、ぜひブックマークしておいてくださいね!
