|
おっちゃん さん、IROCさん、こんばんは。
ユーザーフォームのExitイベント・・・、
扱いづらいですよね!!
>ユーザーフォームのカーソル移動で質問です。
>(過去ログも検索しましたが、うまくヒットしなかったので)
>
>下のようなユーザーフォームがあります。
>
>電話番号
>+------+
>| |
>+------+
>
> 氏名 住所1 住所2
>+----------+ +--------------------+ +--------------------+
>| | | | | |
>+----------+ +--------------------+ +--------------------+
>
> 品番 品名 数量 単価 金額
>+-----+ +----------+ +-----+ +-----+ +-----+
>| | | | | | | | | |
>+-----+ +----------+ +-----+ +-----+ +-----+
>
>電話番号をキーとして、”得意先情報”シートを検索してヒットしたら氏名、住所1,2を表示して品番にカーソルを移動する。ヒットしなかったらカーソルを氏名に移動するようにしたいのです。
>ちなみに電話番号、氏名、住所などはテキストボックスです。
>タブオートは、電話番号、氏名、住所1、2、品番の順です。
>電話番号のテキストボックスのイベントで、Changeを使いましたが1文字入力するとすぐにイベントが発生してしまい、電話番号チェックに行ってしまいます。仮に1文字の電話番号を登録しておくと検索が成功し、住所が表示されカーソルは品番に移動します。検索が失敗したときは氏名へカーソルが移動します。こちらの意図した通りの動きですが1文字入力しただけでChangeイベントが発生するのは困ります。
>ということでExitイベントに変えてみました。
>今度は複数文字が入力できるのですが、検索成功後の品番.SetFocusでまたExitイベントが発生してしまい、電話番号チェックを2回通ります。
>(なぜExitイベントが起きるかわかるような気もしますが)
>その上に検索が成功したとのカーソルが住所2になってしまいます。妙な動きです。
>
>こういう処理をしたいときには、どのようなイベントと処理を行うのが良いのでしょうか?
これ自体は、Keydownイベントなどで対処できます。
一例ですが、
'=========================================================================
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case 13, 9 'EnterキーとTabキー
With TextBox1
If .Text = "1" Then '実際にはここを電話番号を検索した結果で分岐する
TextBox5.SetFocus
End If
End With
Case 40
KeyCode = 0
End Select
End Sub
確認してみて下さい
|
|