こんにちは、Accessブロガーのなかぜんです。
「このフォームは特定の人だけが開けるようにしたい…」「入力ミスや誤操作を防ぐために、ユーザーごとに機能を制限したい」──そんなお悩み、ありませんか?
実はAccessでも、ユーザーごとに使える機能や画面を制限することができます。
この記事では、Access初心者でも実務にすぐ活かせるように、VBAを使ってアクセス制限をかける方法を、具体的なコード付きでご紹介します!
ユーザー別アクセス制限ってどんなもの?
たとえば、こんな場面で使える!
- 一般社員は「閲覧のみ」、管理者だけ「編集・削除可」
- 特定の部署の人だけ、特定のフォームを使用可能に
- ログインユーザーに応じてボタンの表示を切り替える
これができると、誤操作やセキュリティリスクを大幅に軽減できますし、業務の信頼性もアップしますよ。
基本の考え方:ユーザー名で制御しよう
1. 起動時にユーザーを識別する仕組みを作る
Accessでは、ログインユーザー名を取得して、それに応じて処理を分岐させるのが一般的です。以下のようなVBAで取得できます。
' Windowsログインユーザー名を取得
Public Function GetUserName() As String
GetUserName = Environ("Username")
End Function
この関数を使って、起動時やフォームロード時にユーザー名を取得し、それに応じて機能を制御していきます。
実践!フォームの表示制御コード
2. 管理者のみボタンを表示する例
たとえば、「btnDelete」という削除ボタンを、管理者だけに表示するコードは以下のようになります。
Private Sub Form_Load()
Dim userName As String
userName = GetUserName()
' 管理者ユーザーの例:nakano, yamada
If userName = "nakano" Or userName = "yamada" Then
Me.btnDelete.Visible = True
Else
Me.btnDelete.Visible = False
End If
End Sub
これだけで、指定ユーザー以外にはボタンが非表示になります!
データベース内にユーザー情報を管理する方法
3. ユーザーマスタテーブルを作成して制御
Access内に「T_ユーザー権限」テーブルを作り、ユーザー名と権限レベルを登録しておくことで、柔軟な制御ができます。
テーブル名:T_ユーザー権限
フィールド:
・ユーザー名(UserName)
・権限区分(Role:例「管理者」「一般」など)
この情報をもとに、フォームロード時にDLookup関数で権限を取得するコードはこちら:
Private Sub Form_Load()
Dim userName As String
Dim userRole As String
userName = GetUserName()
userRole = Nz(DLookup("Role", "T_ユーザー権限", "UserName='" & userName & "'"), "")
If userRole = "管理者" Then
Me.btnDelete.Visible = True
Else
Me.btnDelete.Visible = False
End If
End Sub
管理者ユーザーの追加や変更もテーブル操作だけで済むので、拡張性が高くおすすめです。
よくあるミスと注意点
- ユーザー名の大文字・小文字の違いに注意(基本はEnviron関数で取得した値と同じに)
- 削除ボタンが初期状態で表示されていると意味がないので、プロパティで「Visible=False」に設定しておく
- 「権限が空白」の場合の処理も忘れずに(エラー回避)
中級者向け応用ポイント
・メニュー制御と連動させる
ナビゲーションフォームやスイッチボードを使っている場合は、ユーザー権限に応じてボタンやリンクの「Enabled」や「Visible」を切り替えましょう。
・フォームの読み取り専用設定
If userRole = "一般" Then
Me.AllowEdits = False
Me.AllowAdditions = False
Me.AllowDeletions = False
End If
これで編集をブロックすることもできます。
まとめ:まずは1画面から始めてみよう
Accessでユーザーごとのアクセス制限をかける方法、いかがでしたか?
- Environ関数でユーザー名を取得
- 権限に応じてボタンやフォームを制御
- テーブルで権限管理すると柔軟に対応可能
最初は難しそうに感じるかもしれませんが、1つのボタン制御からでも試してみるのがコツです。
それでは、またお会いしましょう~。
