VBAを使ってアプリケーションを作っていると、ユーザーにパスワードを入力させたい状況に出くわすことがあります。
こんな時は、自分で「パスワード入力フォーム」を作るのがベストです。
VBAのユーザーフォームには「パスワードコントロール」のような専用のコントロールは存在しません。
ですが、「テキストボックス」コントロールを使えばパスワード入力用のボックスは簡単に作れます。
(入力文字が「***」になるアレです)
というわけで、今回は『VBAでパスワード入力フォームを作る方法』です。
今回のサンプルシナリオ
ひとくちに「パスワード入力フォーム」といっても色々あります。
パスワードの入力のみを求めるフォームや、IDとパスワードをセットで入力するものなど。
そこで、今回のシナリオはシンプルに;
2. 「確認」ボタンをクリック
3. 入力されたパスワードが正しいかを判定
4. 判定によって次のアクションを起こす
としてコードを解説します。
パスワード入力フォームを作る
ユーザーフォームの挿入
まずは図のようにプレーンなフォームをつくります。
注)この記事を読んでいる方はVBAのユーザーフォームの挿入方法はすでにご存知という前提です。
▲Captionは「パスワード認証」としました
テキストボックス
ユーザーフォーム上にテキストボックスを配置します。
パスワード入力フォームを作るうえで、テキストボックスで重要なプロパティを2つ挙げておきます。
その他のプロパティは状況や好みに合わせてアレンジしてください。
PasswordChar プロパティ
PasswordChar プロパティは、テキストボックスに入力された文字をマスキングしたいときに代用する文字を指定します。
一般的にパスワードのマスキングには「*」(アスタリスク) が使われるので今回もそのように設定します。
▲アスタリスクを指定
これで テキストボックスにパスワードを入力すると文字が「***」になります。
IMEMode プロパティ
ユーザーフレンドリーなアプリケーションを作るなら、目的に応じて IMEMode はきちんと設定してあげましょう。
パスワードを入力するときには通常は、かな入力ではなく英数入力でタイプするので IMEはオフ「 2 - fmIMEModeOff 」を指定します。
▲IMEはオフに
コマンドボタン
つぎに「確認」ボタン(コマンドボタン)を配置します。
▲ついでに、「キャンセル」ボタンも配置しておきましょう。
パスワードを判定してアクション
テキストボックスにパスワードを入力したユーザーは「確認」ボタンをクリックします。
以下はコマンドボタンをクリックしたときのパスワードを判定し、その結果によってアクションを分岐させるコードです。
サンプルコード
※サンプルでの正解パスワードは "1234" とします。
' 確認ボタンをクリックしたら
'*********************************************************
Private Sub cmdConfirm_Click()
Dim myMsg As Integer
If txtPW.Value = "1234" Then
' ↓↓↓この部分には実行させたい内容を記述します
myMsg = MsgBox ("Correct!", vbOKOnly) ' 一例です
Else
myMsg = MsgBox ("正しいパスワードを入力してください", _
vbOKOnly + vbInformation, "パスワード認証")
' ↓テキストボックスをクリアしてカーソルを当てる
With txtPW
.Value = ""
.SetFocus
End With
End If
End Sub
'-----------------<< End of Source >>------------------
▲このままコピペで使えます。
上のサンプルを実行して、パスワードが認証された時のイメージはこんな感じです。
キャンセルボタンをクリックしたときはユーザーフォームを閉じるだけです。
Unload Me
End Sub
以上で『VBAでパスワード入力フォームを作る方法』の解説は終了です。
その他の関連記事と併せて仕事に役立ててください。
関連記事・広告
併せて読んでおくとさらに便利
VBAで最終行を取得する方法と そこからできること|Excel VBA
VBA・最終行
VBAで最終行を取得する方法を解説。最終行の行番号を取得できることにより最終行の削除や、最終行までセルを選択したり繰り返したり色々なことが可能になります。
VBAでシート数を取得する方法と そこからできること|Excel VBA
VBA・Countプロパティ
VBAでシート数を取得する方法の解説。VBAを使って各シートに同じ作業をさせる場合は流動的に変化するシート数を取得しておく必要があります。Countプロパティを使って...
VBA カレントフォルダの取得と設定・変更|Excel VBA
VBA・CurDir関数
VBAで カレントフォルダ名 を取得したり、設定(指定)したり変更(移動)したりする方法について解説します。CurDir関数 や ChDirステートメント などの使い方についても触れています。
VBAで空白行を削除する方法|Excel VBA 高速技
VBA・Unionメソッド
VBAを使って空白行の削除方法を解説します。Unionメソッド を使用して空白行を高速で一括削除する方法をサンプルコード付きで解説。ぜひ参考にしてください。
VBA フォルダ内のファイル名一覧の取得|EXCEL VBA
VBA・一覧取得
VBAでフォルダ内のファイル名の一覧を取得する方法を解説。フォルダの中の複数ファイルを自動でひとつずつ展開しながら 連続処理をさせたいときに使える超便利テク!
※その他、関連記事はこの記事の下の方にもあります。