エクセル の学校
8.一覧 9.HOME
1.Top 2.Last

[[20240423160344]]

[ 初めての方へ | 一覧(最新更新順) |

|
| 全文検索 | 過去ログ | エクセルの学校HOME ]

 

『VBAでパスワード入力フォームを作る』(マクロ初心者)

2時間くらい調べたのですが出来なかったのですみませんがお助けください。

要約の通り、エクセルにボタンを配置してそこを押したらインプットボックスが現れて打った文字は****と目隠しされてパスワードが合っていたら指定したマクロが動くということがしたいです。

例として、今標準モジュールには以下のコードを用意しています。

 Sub 列表示()

    Columns("K:N").Select
    Selection.EntireColumn.Hidden = False

 End Sub

そしてこのサイト https://h1r0-style.net/excelvba/howto-make-password-form/ を見ながらユーザーフォームを作り、ユーザーフォームのコードに以下を書きました。

 '*********************************************************
 '   確認ボタンをクリックしたら
 '*********************************************************
 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 >>------------------

 Private Sub cmdCxl_Click()
    Unload Me
 End Sub

 Private Sub UserForm_Click()

 End Sub

そして、Private Sub UserForm_Click()にカーソルを当ててマクロを実行してパスワードを打ってCommandButton1(オブジェクト名:cmdConfirm)を押すと、オブジェクトが見つかりませんというデバッグが出て If txtPW.Value = "1234" Then という部分で引っかかってしまいます。

1.まず最後まで動くにはどこを修正すればよいですか? 2.先述のサイトにはシート上にボタンを配置してマクロを登録する方法が書いていないのでどのようにすれば出来ますか?ボタンを右クリックしてマクロを登録しようとしても標準モジュールのマクロしか出てきません。

以上、よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:unknown >


 txtPW は? ありますか?
(白茶) 2024/04/23(火) 16:42:51

無かったです。 今調べて、これを追記したら1の疑問は解決できました

    Dim txtPW As Variant
    Set txtPW = ActiveSheet.Range("A1")
(マクロ初心者) 2024/04/23(火) 16:53:24

でもこれだとパスワードがシート上に存在してしまうのでやっぱりだめですね… (マクロ初心者) 2024/04/23(火) 17:04:44
 参考にしたリンク先の手順でユーザーフォーム上にテキストボックスを配置してますよね。
 そのテキストボックスのオブジェクト名を「txtPW」とするのですよ。
 (リンク先ではこの説明が抜けてますが)
(hatena) 2024/04/23(火) 17:37:55

大変申し訳ございません。

こちらを見たら出来てしまいました。

https://jizilog.com/vba-pass https://officevba.info/userformmaking/

ありがとうございました。 (マクロ初心者) 2024/04/23(火) 17:41:06


 ありゃ、もう終わってた...
 今更なんでどうでもいい事ではあるんですけど、

 >> この部分には実行させたい内容を記述します

 これだとユーザーフォーム側から「実行させたい内容」を呼び出すっていう建て付けになります。
 InputBox代わりに使うだけだった筈なのでは・・・?
                                                       とか思っちゃうんですよね ^^;

    '[UserForm1]モジュール ----------------------------------------
    Private rtn As Boolean, buf As String
    Public Function InputPassword(userInput As String) As Boolean
        TextBox1.Text = userInput
        Me.Show
        If rtn Then userInput = buf
        InputPassword = rtn
        Unload Me
    End Function
    Private Sub CommandButton1_Click()
        Me.Hide
        buf = TextBox1.Text
        rtn = True
    End Sub

    '標準モジュール -----------------------------------------------
    Sub test()
        Dim userInput As String
        If Not UserForm1.InputPassword(userInput) Then Exit Sub
        If userInput <> "1234" Then
            MsgBox "ちがうよ", vbCritical
            Exit Sub
        End If
        MsgBox "Call 実行させたい内容"
    End Sub

(白茶) 2024/04/23(火) 18:30:21


解決済みですが、私もコメントしておきます。

>エクセルにボタンを配置してそこを押したらインプットボックスが現れて >打った文字は****と目隠しされて >パスワードが合っていたら指定したマクロが動く

リンク先を見ていないですし、質問内容とコードが一致していないので詰まっている部分がわかりませんが、↓のように「インプットボックス」自体を自作するのはどうでしょうか?

 1. ユーザーフォームを作成し、TextBoxを配置してPasswordCharを「*」にしておく
 2. CommandButtonを配置して押したら、TextBoxのTextを取得して、パスワードと一致しているか判定する
 3.↑真なら、「指定したマクロ」をCallする

なお、コード自体を見られたらパスワードがバレますので、厳格に運用したいなら別の手を考えたほうがよいと思います。

(もこな2 ) 2024/04/23(火) 18:35:11


白茶さん 頂いたコードでもできました。ありがとうございます!

もこな2さん VBAProjectにパスワードロックをかける方法を調べたらできました。ありがとうございます! (マクロ初心者) 2024/04/24(水) 09:27:26


>VBAProjectにパスワードロックをかける それもゴニョゴニョすると書き換え出来ちゃいますけどね。

本気でアクセス制御したいなら、ブック内でなんとかするのではなく、見せたくないデータは別ファイルにして、権限のないユーザは参照できないようにするなどの対策が必要かと思います。

(もこな2 ) 2024/04/25(木) 08:44:09





[ 一覧(最新更新順) |

]

キーボードヒント:[Home]または[Fn+Home]キーで一番上へ戻ります

YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.