アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのユーザーフォームにtextboxが2つとCommandButtonが2つ配置しています。
textbox1に入力されるのを10以下に限定するため、それ以上の数字が入力されるとExit時にエラーを表示し、textbox1にフォーカスを戻したいのです。
ですが、以下のようにするとエラー時にはtextbox2も飛ばしてCommandButton1にフォーカスされます。
どのようにするのが正解なのでしょうか。
よろしくお願いします。

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If CInt(TextBox1.Text) > 10 Then
MsgBox ("ダメ")
TextBox1.SetFocus
End If
End Sub

A 回答 (1件)

よーく考えてみて。


TextBox1 にユーザーが何らか入力する。
ユーザーが何らかの操作で TextBox1 から他のコントロールにフォーカスを移動しようとする。
TextBox1 の Exit イベントが駆動する。
TextBox1_Exit イベント プロシージャが実行される。
(Exit イベント プロシージャの中で) TextBox1.SetFocues する。
Exit イベント プロシージャの End Sub を抜ける。
ユーザーが指定した先のコントロールにフォーカスが移る。

ほら、正しい動作でしょ。
フォーカスが抜ける直前に実行されるイベントの中で SetFocus しても、イベントを抜けたら強制的にフォーカスは移動する。

で、Exit イベント プロシージャの引数にある "Cancel" を使って強制的にフォーカスが映るのをキャンセルするわけ。
TextBox1.SetFocus の代わりに Cancel = True としてみ。
    • good
    • 2
この回答へのお礼

ありがとうございました。
cancel=trueってはじめて知りましたけど、応用範囲が広そうですね。exitという動作をcancelするって、素晴らしいです。
助かりました。

お礼日時:2011/05/24 09:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A