| 
    
     |  | おっちゃん さん、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
 
 
 確認してみて下さい
 
 |  |