こんにちは、Ryoです。
VBAで作成したものを実行する際にユーザーを不特定多数ではなく、限定したいケースもあるかと思います。そんな時に使い道がありそうなパスワード入力画面をUserForm(ユーザーフォーム)でつくる方法を書いてみます。
1.サンプル概要
ユーザーフォーム上に配置したテキストボックスにパスワードを入力しますが、入力した文字は「*」で表示されるようにします。
入力後、ボタンを押すことで正否を判定しOKならフォームを閉じ、NGなら警告メッセージを表示してテキストボックスの文字をクリアし、再度入力を待つという形です。
入力NGであれば以下メッセージを表示します。
2.ユーザーフォーム/サンプルコード
◆UserForm1
エディタの「挿入」からユーザーフォームを選択し、その上にテキストボックスとコマンドボタンを配置すればOKです。テキストボックスはTextBox1、ボタンはCommandButton1となっています。
プロパティで変更する部分としてはお好みでフォントやサイズを変えても良いと思います。
本サンプルはメイリオフォントでサイズ14にしています。
◆サンプルコード
先ずUserFormの初期設定を行います。
Private Sub UserForm_Initialize() 'テキストボックスの文字を中央揃え TextBox1.TextAlign = fmTextAlignCenter 'テキストボックスに入力された文字を「*」にする TextBox1.PasswordChar = "*" End Sub
ここで実行しているのは、TextBox1内の文字を中央に揃えて入力された文字を「*」で表示する設定になります。
パスワードとして入力を可能にするにはPasswordCharプロパティを使います。
オブジェクト.PasswordChar = “指定する文字”
このように指定しますので、サンプルでは入力した文字が*になるということです。
次にパスワード入力後のボタンクリック処理になります。
Private Sub CommandButton1_Click() '正しいパスワードが入力されたら閉じる If TextBox1 = "PASS" Then Unload UserForm1 '又はUnload Me Else MsgBox "パスワード不一致です。" & vbCrLf & _ "再入力してください", vbCritical '不一致の場合はテキストボックスをクリアする With TextBox1 .Value = vbNullString .SetFocus End With End If End Sub
本サンプルでは「PASS」をパスワードとしています。。。安直ですね(笑)
先ずIf文で判定しOKであればフォームを閉じます。
NGの場合はメッセージボックスで警告を表示していますが、その後処理としてテキストボックスの文字をクリアする.Value = vbNullString、テキストボックスをフォーカスする為に.SetFocusを指定します。
この指定は無くても問題はありませんが、実際に使用してみると再入力時の既入力文字を消す手作業やマウスクリックでフォーカスを直すのが地味に煩わしいので記述しています。
以上の記述で簡単にパスワード入力画面がつくれます。
3.まとめ
実運用上はパスワード入力画面のフォームは「×」を無効化する必要があると思います。
その方法については以前の記事で紹介していますので、よろしければご参照ください。
今回ご紹介した方法は手軽にパスワード設定できますから、使用者を限定したり条件設定画面のアクセスを制限したり等に使えるかと思いますので、機会あればご検討くださいね。
以上、ユーザーフォームでパスワード入力画面をつくる方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo