category name  »  page title date

パスワードを入力して照合する

簡易なパスワード入力/照合のマクロ。
マクロ RequestPassWord() を実行すると、パスワードの入力を促すフォームを表示し、正しいパスワードを入力するか、「X」でフォームを消すかするまで表示し続けます。
とても安直な照合ですので、コードを見ればすぐに見破られてしまいますが、このマクロを使ってパスワードを入れないとコードにアクセスできないようにしておけば、リスクは減らせます。ユーザーが自由にコードを改竄されるのを避ける時などに使えそうです。

用意する入力用のユーザーフォームは、PassWordTextBox というテキストボックスがひとつだけある、実にシンプルなものです。PassWordForm という名前のユーザーフォームにしておきます。
PassWordForm のコードは以下のとおり。まずふたつの定数を定義してありますが、incorrectLetter は不正な入力があった場合の表示文字、passWordLetter は、正しいパスワードです。checkPassWord で入力した語の照合を行い、passWordLetter でなかった場合には、incorrectLetter を表示して全体を選択状態にします。

ユーザーフォーム     PassWordForm

Private Const incorrectLetter = "????????"
Private Const passWordLetter = "passWord"
'--- 入力欄の初期化
Private Sub UserForm_Activate()
      PassWordTextBox.text = ""
End Sub
'--- 「X」でクローズした場合
Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
    Confirmed = False
End Sub
'--- テキスト入力後 Enter キーを押した場合
Private Sub PassWordTextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        checkPassWord
        If Not Confirmed Then Exit Sub
        Me.Hide
    End If
End Sub
'--- パスワードの照合
Private Sub checkPassWord()
    With PassWordTextBox
        Confirmed = (.text = passWordLetter)
        If Not Confirmed Then
            Beep
            .text = incorrectLetter
            .SetFocus
            .SelStart = 0
            .SelLength = Len(.text)
        End If
    End With
End Sub

標準モジュールからは、RequestPassWord() で PassWordForm の表示を行います。
表示が終わって帰ってきた時には、Confirmed を参照すれば照合結果が得られます。

標準モジュール           RequestPassWord()

'--- 照合結果
Public Confirmed As Boolean
'--- フォームを表示して照合
Public Sub RequestPassWord()
      PassWordForm.Show vbModal
End Sub