プロが教えるわが家の防犯対策術!

VBAでTextBoxを入力・表示用兼用にしたProgを作っています。
表示の場合は、TextBox.Textへデータをセットしています。

TextBoxの値が変化した場合は、Changeイベントが発生しますが、
TextBox_change()の処理において、
イベントがキーボード入力で発生したものか、Progの内部セットで発生したものかを判別するのに苦労しています。
適切な判別方法の教えて頂きたくよろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございます。
KeyDownはユニークな考えと思いました。
Progが煩雑にならない工夫をしながら取り入れてみたいと思います。

お礼日時:2009/06/26 14:04

そのモジュール(シートや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
' キー入力時の処理
といった具合でうまくいきませんか
    • good
    • 0
この回答へのお礼

ありがとうございます。
私も、フラグ方式は各所で使用しています。
この方式で、上手くいくと思います。
bFlagProg = True
TextBox1.Text = "abc"
bFlagProg = False
の部分を関数化してみようと思いました。

お礼日時:2009/06/26 13:59

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