PR

【VBA】ユーザーフォームでパスワード入力画面をつくる

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、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.まとめ

実運用上はパスワード入力画面のフォームは「×」を無効化する必要があると思います。
その方法については以前の記事で紹介していますので、よろしければご参照ください。

【VBA】UserFormに最小化/最大化を追加して「閉じる」を無効化する!
こんにちは、Ryoです。 VBAでUserFormを使う機会は多いと思いますが、操作している際にうっかり「×」を押して閉じてしまったり、Windowサイズを調整したいなーと思ったり、邪魔だから最小化したかったり、とにかく最大にしてみたい(・...

今回ご紹介した方法は手軽にパスワード設定できますから、使用者を限定したり条件設定画面のアクセスを制限したり等に使えるかと思いますので、機会あればご検討くださいね。




以上、ユーザーフォームでパスワード入力画面をつくる方法についてでした!
今回の記事が何かの参考になれば幸いです。

Ryo

 

タイトルとURLをコピーしました