- ベストアンサー
エクセルのユーザーフォームについて
- エクセルのユーザーフォームを使ってパスワード入力用のしかけを作成する方法について説明します。
- ユーザーフォームにテキストボックスとコマンドボタンを配置し、テキストボックスのPasswordCharを設定することで、パスワードを非表示にします。
- Enterキーを1回押すだけでユーザーフォームを消す方法についても解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ユーザーフォーム上のコマンドボタンのプロパティで、Defaultの欄をFalseからTrueに変更すればどうでしょう。 でも、閉じる前にMsgBox "OK!"が出るので、やはり2回になるのでは?
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
>ユーザーフォームのコマンドボタンを押してもBeforeUpdateイベントが働く 結果的にはそうなりますが,そういう事ではありません。 フォーム上の他のコントロールをクリックすると,テキストボックスはそれまで自分が持っていたフォーカスを失います(カーソルが外れる)。 その瞬間にテキストボックスに設定したテキストボックスのイベントが起動します。詳細はVBAのヘルプに書いてありますので,必ず目を通してください。(といっても最初はサッパリイミフメイなのはしょうがないことですが) 通常の設定では,EnterやTABキーを押すことでも次のコントロールにフォーカスが移ります。 そのタイミングで,テキストボックスがフォーカスを失う瞬間をとらえてイベントが起動します。 #いつもいつもあれこれ追加で質問されるので,回答をためらいます。
お礼
重ねてお答えいただきありがとうございます。 > #いつもいつもあれこれ追加で質問されるので,回答をためらいます。 理解力が足りないものでついつい確認してしまいました。 回答を見て新たに浮かんだ疑問は別の質問とすべきということなんですね。 失礼いたしました。
- keithin
- ベストアンサー率66% (5278/7941)
そういう組み込みをしていくと,実際にはコマンドボタンとの仕事の分担はどうするのかとか,フォームを×で閉じたらどうするのかとか色々次々出てきます。 が,まぁそういうのは次の考慮事項として,とりあえず今回ご質問の内容に関しては,これもやり口は色々考えられますが一例としてコマンドボタンに渡す前にテキストボックス自身のイベントで処理します。 作成例: Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1 = "" Then Exit Sub If StrConv(Me.TextBox1, vbLowerCase) = "abcd" Then MsgBox "OK" Me.TextBox1 = "" Me.Hide Else MsgBox "NG" Me.TextBox1 = "" Cancel = True End If End Sub #NGだったときにテキストボックスにフォーカスを戻す,これが一番カタい手だとワタシは思います。
お礼
ありがとうございます。 BeforeUpdateイベントとは初めて知りました。 データが変更されたときに働くのですね。 これを使うと、コマンドボタンのプロパティのDefaultはFalseのままで、Private Sub CommandButton1_Clickのコードも書かないのに、エンターキーではなくコマンドボタンを押しても作動しましたが、ユーザーフォームのコマンドボタンを押してもBeforeUpdateイベントが働くというよに考えてよろしいのでしょうか?
お礼
ありがとうございました。 なんとそんな簡単なことでOKなんですね。 助かりました。 メッセージボックスの件はその通りでした。