- ベストアンサー
エクセル2007のテキストボックスに値を入力し終わったらイベントを発生させる方法
- エクセル2007のActiveXコントロールのテキストボックスにはAfterUpdateイベントが存在しないため、テキストボックスに値を入力し終わったらイベントを発生させる方法はありません。
- VBE画面でシートイベントを確認してもAfterUpdateイベントは見つかりません。
- テキストボックスに「aiu」と入力し終わったらイベントを発生させたい場合は、別の方法を探す必要があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>「TextBox1に値がなかったら、MsgBoxは表示させない」 >と言うことでしょうか。 いえ、そうではなく、 If TextBox1 <> txtData Then としていますから、テキストボックスにフォーカスが 移ったときにテキストボックスの値を変数に格納しておいて、 テキストボックスからフォーカスが移動したときに 改めてテキストボックスのデータと前もって変数に 入れておいた値を比べて値が違っていたら メッセージボックスを表示します。 最初にテキストボックスが空で、フォーカスが 移動したときに何らかの値が入力されていたら メッセージボックスを出します。 また、最初に何らかの値が入っていて、 フォーカスが移動したときに違う値に なっていたらメッセージボックスをだします。 つまり、 Private Sub TextBox1_Change() の代わりのようなものです。 変数はVariant型にしているので、文字、数値にも対応します。
その他の回答 (3)
- piroin654
- ベストアンサー率75% (692/917)
No3の >Private Sub TextBox1_Change() >の代わりのようなものです。 というのは、No2の回答全体が、という意味です。 改良型のChangeということです。 ただ単に、_LostFocusだけでなく、 No2のようにGotFocusと組み合わせることで、 テキストボックスの値の変更の感知と、 >「a」を入力した時点で、MsgBox が表示されてしまいます。 というようなことを避けることが出来るということです。
お礼
ありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
No1です。少し泥臭くするなら、 Option Explicit Dim txtData As Variant Private Sub TextBox1_GotFocus() txtData = TextBox1.Value End Sub Private Sub TextBox1_LostFocus() If TextBox1 <> txtData Then MsgBox "" End If End Sub のような感じはどうでしょう。
お礼
LostFocusよりGotFocusが先に実行されるのですね。 GotFocusイベントでまず、TextBox1の値を読み取り、txtDataの変数に入れ、 LostFocusイベントは、 「TextBox1に値がなかったら、MsgBoxは表示させない」と言うことでしょうか。 ありがとうございました。
- piroin654
- ベストアンサー率75% (692/917)
Private Sub TextBox1_LostFocus() では?
お礼
できました。LostFocusイベントを使うのですね。 ありがとうございました。
お礼
ありがとうございました。大変参考になりました。