時と場合によっては、誰でもフォームを開くことができる状況のままでは困るときがあります。
ここでは、VBA内にIDとパスワードを書き込み、パスワード画面をとおして目的のフォームを開く技を紹介します。IDとパスワードでユーザーを識別する
- ID、パスワード入力フォームを(frm_pass)作成します。
- テキストボックスを2個(txtNamePass、txtCountPass)作成します。
- txtNamePassはID入力テキストボックス、txtCountPassはパスワード入力テキストボックスとして使用します。
- txtCountPassテキストボックスの更新後処理イベントプロシージャを作成し、ユーザーの入力値との照合を行い一致すれば目的のフォーム(frm_sample)を開きます。
IDとパスワード入力の作成
- 非連結のID、パスワード入力フォーム(frm_pass)を作成します。
- テキストボックスを2個(txtNamePass、txtCountPass)作成します。

- 各プロパティダイアログを開き、IME入力モードを"オフ"にします。
- txtCountPassテキストボックスの定型入力モードを"パスワード"に設定します。

IME入力モード
IDとパスワードは、半角英数字に限定された方が何かと管理がし易いです。
しかし、このようにするとIMEモードをオフにしないと正しくパスワード照合ができなくなる場合が多いので、"オフ"に設定します。
定型入力モード
テキストボックスに入力したデータをそのまま表示させるのはセキュリティの面で問題があります。
このような場合は、定型入力モードで"パスワード"を選択すると、全て****で表示されます。
|
txtCountPassテキストボックスの更新後処理イベントプロシージャの作成
txtCountPassテキストボックスの更新後処理イベントプロシージャを作成します。
Private Sub txtCountPass_AfterUpdate()
Dim TextBoxA As TextBox
Dim TextBoxB As TextBox
Set TextBoxA = Me.txtNamePass ' --- A
Set TextBoxB = Me.txtCountPass
Const NamePass = "suzuki" ' --- B
Const CountPass = "1234"
If TextBoxA = NamePass Then ' --- C
If TextBoxB = CountPass Then ' --- D
DoCmd.OpenForm "frm_sample" ' --- E
DoCmd.Close , "frm_pass"
Else
MsgBox "パスワードが異なります。", vbOKOnly + vbCritical
End If
Else
MsgBox "IDが異なります。", vbOKOnly + vbCritical
End If
End Sub
解説
- Setステートメントで変数にオブジェクトを代入します。
- ConstステートメントでID、パスワードの値を設定します。
- IFステートメントでIDのチェックを行います。
- IFステートメントでパスワードのチェックを行います。
- IDとパスワードが合致すれば、frm_sampleフォームを開きます。
動作確認
- デザインビューからフォームビューに切り替えます。
- IDとパスワードを、それぞれsuzuki、1234と入力しEnterキーを押します。

- 「社員別出身都道府県リストフォーム」が開き、「ID、パスワード入力」フォームが閉じます。

プロシージャ内にパスワードを記述する
パスワード制限を行う場合、パスワードの保存場所が一番問題になります。露営する可能性の低い場所としては、プロシージャ内が最も優れています。何故なら、MDEファイルに変換するとプロシージャエリアにアクセスできなくなるからです。
しかし、プロシージャ内に記述するとパスワード変更が事実上できなくなります。
パスワードの保管場所
パスワードを保管する場所としては、テーブルフィールドにパスワードを保管する方法があります。パスワードの照合には、DlookUpステートメントを用います。
|
関連ページ

|