Excelマクロのユーザーフォームでパスワード画面作成

エクセル

こんにちは。ITOです。最近とてつもなく暑いですね。。立っているだけでも汗が止まりません。こんなときには暑さをパスワードロックしたくなりますね!

パスワードと言えば、

先日エクセルのVBAでユーザーフォームを作っていたのですが、ある機能にアクセス制限をかけて利用したい場面があり、パスワードを知っている人だけが使えるようにしようと思いました。

そこで、パスワードの入力フォームを作ったのでその時のメモメモです。

フォームについて

こんな感じのフォームです。

パスワードを入力してもらい、ログインボタンを押すとパスワードが合っているか判定します。

間違っていれば警告を出して再度入力を求めます。

また、パスワード入力中は入力した文字が ● で表示され、分からないようになっているのですが、入力テキストボックスの横の “表示ボタン” を押すと入力文字列が表示されるようにしています。もう一度 “表示ボタン” を押すと非表示状態に戻ります。

“キャンセルボタン” を押すとフォームを閉じます。

“戻るボタン” を押すと前の画面に戻ります。

フォームの作成

まずはそれっぽいフォーム作成!

使ってるツール?コントロール?はラベル(Label)テキストボックス(TextBox)コマンドボタン(CommandButton)、そしてトグルボタン(ToggleButton)です。

それぞれをいい感じの大きさにして、いい感じの場所に配置します。

フォームのプロパティ

パスワード入力をするためにテキストボックスの PasswordChar プロパティを設定します。

プロパティウィンドウの項目別タブの表示の中にあります。

この設定をしなくてもテキストボックスに入力された値が正しいのか間違っているのかを判定することはできるのですが、パスワード入力画面っぽくなるので設定しましょう!

PasswordChar設定あり
PasswordChar設定なし

PasswordChar に ● を設定しています。私の windows 環境では “まる” と打って変換すると出てきました!

● 以外でも好きな文字にできるのでお好みで!

* を設定してみました!悪くないですねぇ

★ にしてみました!こっちもいいですねぇ。。★がいっぱい並んでると食蜂操祈が頭に浮かびます!!

フォームのソースコード

ログインボタンを押したとき

ログインボタンを押したときの挙動を記述します。

VBA
Private Sub CommandButtonRun_Click()
    Dim password As String
    password = "123456789"
    
    If TextBoxInputPassword.Value = password Then
        MsgBox "パスワードは合ってます!!"
        Unload Me
    Else
        MsgBox "パスワードが間違っています。", 48
        'パスワード入力ボックスにフォーカス
        TextBoxInputPassword.SetFocus
        '入力済みの文字列を選択
        TextBoxInputPassword.SelStart = 0
        TextBoxInputPassword.SelLength = Len(TextBoxInputPassword.Text)
        Exit Sub
    End If

End Sub

3行目でパスワードの正解を 123456789 としています。すぐに推測されそうです。。。

予め決めておいたパスワードと一致していれば “パスワードは合ってます!!” とメッセージを出して終了します。

間違っていれば “パスワードが間違っています。” と警告を出してもう一度入力フォームに戻ります。このときに、すでに入力されている文字列を選択した状態にしているのが11行目と13, 14行目の処理です。

この処理のおかげで、間違えて再びパスワード入力する際に、以下のように入力済み文字列が選択されます。

これがないと地味にめんどくさいです。

戻るボタンを押したとき

戻るボタンを押したときの挙動を記述します。

VBA
Private Sub CommandButtonReturn_Click()
    Unload Me
    UserFormTop.Show
End Sub

このパスワード入力フォームを閉じてから、パスワード入力フォームを呼び出したフォームを表示します。

キャンセルボタンを押したとき

キャンセルボタンを押したときの挙動を記述します。

VBA
Private Sub CommandButtonReturn_Click()
    Unload Me
End Sub

パスワード入力フォームを閉じるだけです。さっきの戻るボタンのときの前フォームの表示がないパターンですね。

表示トグルボタンを押したとき

最後に入力テキストボックスの横の “表示トグルボタン” を押したときの挙動です。

VBA
Private Sub ToggleButtonDispPass_Click()
    If ToggleButtonDispPass.Value Then
        TextBoxInputPassword.PasswordChar = ""
    Else
        TextBoxInputPassword.PasswordChar = "●"
    End If
End Sub

トグルボタンの値は押されている(凹んでいる)状態のときに True となり、押されていない状態のときは False となっているので if 文で分岐して、押されているときのパスワード入力テキストボックスの PasswordChar の値を何もない状態(“”を代入)にします。←3行目

押されていない状態のときは再び PasswordChar の値を ● にします。←5行目

これでいつでもエクセルのマクロでパスワード入力ができます!

コメント

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