『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
Dim txtPW As Variant Set txtPW = ActiveSheet.Range("A1") (マクロ初心者) 2024/04/23(火) 16:53:24
参考にしたリンク先の手順でユーザーフォーム上にテキストボックスを配置してますよね。 そのテキストボックスのオブジェクト名を「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
本気でアクセス制御したいなら、ブック内でなんとかするのではなく、見せたくないデータは別ファイルにして、権限のないユーザは参照できないようにするなどの対策が必要かと思います。
(もこな2 ) 2024/04/25(木) 08:44:09
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.