- ベストアンサー
TextBoxの入力・表示の判別方法
VBAでTextBoxを入力・表示用兼用にしたProgを作っています。 表示の場合は、TextBox.Textへデータをセットしています。 TextBoxの値が変化した場合は、Changeイベントが発生しますが、 TextBox_change()の処理において、 イベントがキーボード入力で発生したものか、Progの内部セットで発生したものかを判別するのに苦労しています。 適切な判別方法の教えて頂きたくよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Sheet1にTextBoxを貼り付け シートモジュールに下記2つを作る。(A)(B)とする Private Sub TextBox1_Change() MsgBox "ChangeIEvevt " & TextBox1.Text End Sub Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then MsgBox "Enter " & TextBox1.Text End If End Sub 標準モジュールに下記を作る。(C)とする Sub test01() Worksheets("Sheet1").TextBox1.Text = "aabaa" End Sub ーー (c)を実行した場合Changeイベントが発生。 (B)は発生しない。 Enterキーでテキストボックスの値を取るという約束にして Enterを押すと(B)が発生する。 ーー それで Chaneイベントは1字1字の入力で発生して、余り使えないので、 (B)だけにしてはどうでしょう。 何か文字入力の終わりを捉えるものを決めないといけない。 ーー (B)にTAB押し下げも加える必要が有るかも。 If KeyCode = 9 Then MsgBox "Tab " & TextBox1.Text End If
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
そのモジュール(シートやUserForm、またはClass)レベルで共有するフラグを用意すればいいのでは VBEでそのText_Changeイベントの書かれているファイルを開いて 冒頭の変数などを宣言するエリアに dim bFlagProg as Boolean などと定義しておきます TextBox.Textを変更するコード付近で bFlagProg = True TextBox1.Text = "abc" bFlagProg = False といった具合にしておいて Changeイベント側では if bFlagProg then Exit Sub end if ' キー入力時の処理 といった具合でうまくいきませんか
お礼
ありがとうございます。 私も、フラグ方式は各所で使用しています。 この方式で、上手くいくと思います。 bFlagProg = True TextBox1.Text = "abc" bFlagProg = False の部分を関数化してみようと思いました。
お礼
ありがとうございます。 KeyDownはユニークな考えと思いました。 Progが煩雑にならない工夫をしながら取り入れてみたいと思います。