• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストボックスに値を入力し終わったらイベントを発)

エクセル2007のテキストボックスに値を入力し終わったらイベントを発生させる方法

このQ&Aのポイント
  • エクセル2007のActiveXコントロールのテキストボックスにはAfterUpdateイベントが存在しないため、テキストボックスに値を入力し終わったらイベントを発生させる方法はありません。
  • VBE画面でシートイベントを確認してもAfterUpdateイベントは見つかりません。
  • テキストボックスに「aiu」と入力し終わったらイベントを発生させたい場合は、別の方法を探す必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>「TextBox1に値がなかったら、MsgBoxは表示させない」 >と言うことでしょうか。 いえ、そうではなく、 If TextBox1 <> txtData Then としていますから、テキストボックスにフォーカスが 移ったときにテキストボックスの値を変数に格納しておいて、 テキストボックスからフォーカスが移動したときに 改めてテキストボックスのデータと前もって変数に 入れておいた値を比べて値が違っていたら メッセージボックスを表示します。 最初にテキストボックスが空で、フォーカスが 移動したときに何らかの値が入力されていたら メッセージボックスを出します。 また、最初に何らかの値が入っていて、 フォーカスが移動したときに違う値に なっていたらメッセージボックスをだします。 つまり、 Private Sub TextBox1_Change() の代わりのようなものです。 変数はVariant型にしているので、文字、数値にも対応します。

ncxz78e
質問者

お礼

ありがとうございました。大変参考になりました。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No3の >Private Sub TextBox1_Change() >の代わりのようなものです。 というのは、No2の回答全体が、という意味です。 改良型のChangeということです。 ただ単に、_LostFocusだけでなく、 No2のようにGotFocusと組み合わせることで、 テキストボックスの値の変更の感知と、 >「a」を入力した時点で、MsgBox が表示されてしまいます。 というようなことを避けることが出来るということです。

ncxz78e
質問者

お礼

ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

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 のような感じはどうでしょう。

ncxz78e
質問者

お礼

LostFocusよりGotFocusが先に実行されるのですね。 GotFocusイベントでまず、TextBox1の値を読み取り、txtDataの変数に入れ、 LostFocusイベントは、 「TextBox1に値がなかったら、MsgBoxは表示させない」と言うことでしょうか。 ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

Private Sub TextBox1_LostFocus() では?

ncxz78e
質問者

お礼

できました。LostFocusイベントを使うのですね。 ありがとうございました。

関連するQ&A