ACCESSでログイン画面の作り方【詳しく解説】

ログイン画面
目次

システムの最初の画面 ログインフォームをACCESSで作る

ACCESSは会社の業務効率化に大きな力を発揮します
小規模事業所向けの簡単なシステムから 少し頑張れば結構大きなシステムも Microsoft Access を使うことで 自前で作ることができます
そこで 今回は 大きな基幹業務システムでは必ず実装されている 最初の画面 『ログインフォーム』をACCESSで作ってみました

あわせて読みたい

ログインフォームとは

システムの利用者がそのシステムを使う権限があるかを ユーザーコードとパスワードの組み合わせで判断し、権限があれば本システムのメニューが起動するといった機能がある画面です

また、ユーザを特定して次のシステムに進んだとき 権限によりそのシステムでできることできないことをわけることができます

さっそく作っていきます

ログインフォームの画面

こんなフォームを作ります

ログインフォーム
ログイン画面のパーツ
  • 社員コード パスワードをいれ ログインする
  • 権限により開くフォームを変える
  • パスワードを変更する (パスワード変更フォームは次章で紹介)
  • 終了ボタン

ログインフォームには社員マスタをつかいます

システムを利用するユーザーは当社の社員の特定の部署のメンバーです
当社システムの社員マスタを使います

社員マスタログイン項目
サンプルのため架空の情報です
  • 社員マスタには【社員CD】 【氏名】 【password】 【権限】 の項目があります
  • このシステムを使うのは営業、総務、経理、業務のみで 建機部署は使用しませんので、部署CD 5 建機 以外となります
  • 総務、経理と営業と業務とでは 使える機能に違いをつけるため 権限 1または2 を振り分けています

ログインフォームのパーツにチェック、分岐の判断を設定します

社員CDを入力する コンボボックスの設置

システムの利用者が自分の社員コードを入れます
ここでは、コンボボックスの機能を使い 下のようにリストから選べるようにします

コンボボックス
STEP
コンボボックス用にクエリを作成

社員マスタ(SYS社員テーブル)から フィールドに 社員CD氏名カナ部署CD退職日を選ぶ

  • カナの並べ替えを昇順にする リストがカナ順に表示される
  • 部署CDには 建機部以外を選ぶので 建機部CD 5以外 <>5 といれる
  • 忘れがちなのが 退職しているものまで選んでしまうこと 退職日が入っていない人を選ぶために
     抽出条件に Is Null といれる  
コンボボックス用クエリ
STEP
社員CDのプロパティ 設定
プロパティシートのデータタブ
  • 値集合ソースにSTEP ① で作った クエリ Q_cmbsyain を選びます
  • 連結列は 1 (デフォルトのまま)
コンボボックスプロパティ
書式タブ
  • 列数 3 (社員CD 氏名 カナ)
  • 列幅 1.5 cm;3cm;3cm  (表示されるリスト幅を確認しながら調整していく)
  • リスト行数 20 ぐらい (画面の高さによって調整する)
  • リスト幅は列幅の合計 
プロパティ書式

社員CD コンボボックス入力後のチェックと処理 (VBA)

社員CD(入力者)のチェック項目
  • 社員CDが未入力のとき メッセージ「社員CDを選んでください」と表示
  • 社員CDがリストにないとき メッセージ「社員CDを確認してください」と表示
更新後の処理
  • 社員名を表示
  • 権限をテキストボックスに保存

社員CD(入力者)コンボボックスの更新後処理にイベントプロシージャを選び Visual Basic Editor を起動します

更新後イベント

社員CDを入れたあと(イベント:更新したあと)に実行される処理のコード

Private Sub cmb_syainCD_AfterUpdate()
On Error GoTo Err_cmb_syainCD_AfterUpdate

    Me!txt_syainName = ""
    Me!txt_Pass = ""
    Me!txt_kengen = ""
    
    
    If IsNull(Me!cmb_syainCD) Then
        MsgBox "社員CDを選んでください"
        Me!cmb_syainCD.SetFocus
    Else
        If IsNull(DLookup("氏名", "Q_cmbsyain", "社員CD = " & Me!cmb_syainCD)) Then
            Me!txt_syainName = ""
            Me!txt_Pass = ""
            Me!txt_kengen = ""
            MsgBox "社員CDを確認してください"
            Me!cmb_syainCD.SetFocus
            
        
        Else
            Me!txt_syainName = DLookup("氏名", "SYS社員", "社員CD = " & Me!cmb_syainCD)
            Me!txt_kengen = DLookup("権限", "SYS社員", "社員CD = " & Me!cmb_syainCD)
        
       End If
    End If

Exit_cmb_syainCD_AfterUpdate:
    Exit Sub
Err_cmb_syainCD_AfterUpdate:
    MsgBox Err.Description
    Resume Exit_cmb_syainCD_AfterUpdate

End Sub

Me!txt_syainName = “”
Me!txt_Pass = “”
Me!txt_kengen = “”

まず、社員名 password  権限をリセット(空白)します
何度か入れなおしていくと 前回入れたコードによってセットされた内容が残るので まず最初にここで消しておきます

If IsNull(Me!cmb_syainCD) Then
    MsgBox “社員CDを選んでください”
    Me!cmb_syainCD.SetFocus

If :もし 社員CD(cmb_syainCD)が IsNull : 空白なら
    MsgBox: 社員CDを選んでください と表示
    Me!cmb_syainCD.SetFocus : 社員コードに SetFocus : カーソルをセットする

結果:このようなメッセージがでます

CD未入力

Else
   If IsNull(DLookup(“氏名”, “Q_cmbsyain”, “社員CD = ” & Me!cmb_syainCD)) Then
      Me!txt_syainName = “”
      Me!txt_Pass = “”
      Me!txt_kengen = “”
      MsgBox “社員CDを確認してください”
      Me!cmb_syainCD.SetFocus

Else: 社員CDが空白ではなかったら (入力されていたら)
IF:もし 入れた社員コードが入力者のリストになければ
     Me!txt_syainName = “”  社員名をリセット(空白)する
     Me!txt_Pass = “”  パスワードをリセット(空白)する
     Me!txt_kengen = “”  権限を空白にする
     MsgBox: 社員CDを確認してください  と表示する
     Me!cmb_syainCD :社員CDコンボボックスに SetFocus : カーソルをセットする

結果:このようなメッセージが出ます

CDチェック

Else
   Me!txt_syainName = DLookup(“氏名”, “SYS社員”, “社員CD = ” & Me!cmb_syainCD)
   Me!txt_kengen = DLookup(“権限”, “SYS社員”, “社員CD = ” & Me!cmb_syainCD)

End If
End If

社員CDが正しく入力されたら行う処理です
Me!txt_syainName に SYS社員テーブルの社員CDがフォームの社員CDと同じである氏名を入れる
Me!txt_kengen に SYS社員テーブルの社員CDがフォームの社員CDと同じである 権限を入れる

End If : 最初のIF文に対する End処理
End If : 次のIF文に対する End処理

社員名に 名前がはいります

権限テキストボックスに 対象の社員の権限がはいります

  • 社員それぞれの権限によって開くメニューをかえるために必要なテキストボックス
コンボボックスOK

パスワード入力 テキストボックスの設定

パスワードを入力するテキストボックスに定型入力ウィザードからパスワードを設定することで 
入力文字が ****** と表示されます

パスワードテキストボックス

ログインボタンのチェックと処理(VBA)

ログインボタン設定

ログインボタンのクリック時イベントに イベントプロシージャを選び Visual Basic Editor を起動します

ログインVBA

パスワードをいれログインボタンを押したときのチェックと処理をVBエディターにコードを書きます

社員コードの更新後イベントと同様のチェックをひととおり行ったあと パスワードのチェックを行います

Private Sub btn_login_Click()
On Error GoTo Err_btn_login_Click

    If IsNull(Me!cmb_syainCD) Then
        MsgBox "社員CDを選んでください"
        Me!cmb_syainCD.SetFocus
    Else
        If IsNull(DLookup("氏名", "Q_cmbsyain", "社員CD = " & Me!cmb_syainCD)) Then
            Me!txt_syainName = ""
            Me!txt_Pass = ""
            Me!txt_kengen = ""
            MsgBox "社員CDを確認してください"
            Me!cmb_syainCD.SetFocus
            
        Else
            If Me!txt_Pass <> DLookup("password", "SYS社員", "社員CD = " & Me!cmb_syainCD) Then
                MsgBox "パスワードが違います", vbOKOnly
            Else
                If Me!txt_kengen = 1 Then
                    MsgBox "フォーム 1 を開きます"
                Else
                    MsgBox "フォーム 2 を開きます"
                End If
            End If
        End If
    End If
        
Exit_btn_login_Click:
    Exit Sub
Err_btn_login_Click:
    MsgBox Err.Description
    Resume Exit_btn_login_Click
End Sub

If Me!txt_Pass <> DLookup(“password”, “SYS社員”, “社員CD = ” & Me!cmb_syainCD) Then
   MsgBox “パスワードが違います”, vbOKOnly
   Me!pass.SetFocus

Me!txt_Pass : パスワードが 社員マスタ(SYS社員)のパスワードと違っていれば
MsgBox : パスワードが違います と表示し txt_Pass (パスワード)にカーソルをセットします

Else
If Me!権限 = 1 Then
   MsgBox “Form 1をひらきます”
Else
   MsgBox “Form 2をひらきます”
End If
End If

ELse : 前記の条件がすべて違っていたら
If Me!txt_kengen = 1 Then : もし 権限が 1 なら
   MsgBox ” Form 1 をひらきます” : Form 1 をひらきます とメッセージが表示
Else : 権限が 1 でなかったら
   MsgBox ” Form 2 をひらきます” :Form 2 をひらきます とメッセージが表示

社員コードとパスワードが一致したら 権限によって 開くフォームを指定します
※フォームを作成したら メッセージではなく それぞれのフォームを開くコードを記述

まとめ

ログインフォームはシステムを利用する際の最初の画面です

ACCESSのシステムで ログインフォームを実装することで ユーザーチェックや権限による機能の制限、そしてこのあと作成していく多くのシステムにおいて データの更新者のログや更新時間を項目にセットすることにより便利なツールとなります

いやぁ なんか すっごいシステムっぽくなったなぁ

ももい

ログインフォームだけで なんかすっごいシステムっぽいでしょ
つぎは 『パスワード変更』いってみよう

ACCESSシステムを作って公開するにあたって
マニア建機リースの社員情報や車両情報などのデータがないと作ることはできません
しかし 実際のデータを使うことはできません
そこで そんなデータをランダムに作ってくれるツールがあります

目次