こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エラー時カーソルを戻したいのですが?

エクセルVBAに入出荷(在庫管理)を作成しているのですが
テキスト1に品番を入力して品番が無かった場合
テキスト1などを空白にしてテキスト1にカーソルを
戻したいのですが下記のように書き込むとテキスト2に
カーソルが行ってしまいます。どこを直せばいいでしょうか?

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i As Integer
If KeyCode = 13 Then
For i = 4 To 400
If Sheets("倉庫在庫(記入用)").Cells(i, 1) = TextBox1 Then
Label6 = Sheets("倉庫在庫(記入用)").Cells(i, 4)
Label7 = Sheets("倉庫在庫(記入用)").Cells(i, 5)
TextBox2.SetFocus
Exit Sub
End If
Next i
MsgBox "品番がありません!"
TextBox1 = ""
Label6 = ""
Label7 = ""
End If
TextBox1.SetFocus
End Sub

投稿日時 - 2007-02-08 20:22:24

QNo.2735621

困ってます

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

こんばんは。

KeyDownイベントではなくて、Exitイベントを使ってみたらどうでしょう。

'----------------------------------------------------------------------

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

  Dim i As Integer

  For i = 4 To 400
    If Sheets("倉庫在庫(記入用)").Cells(i, 1).Value = TextBox1.Text Then
      Label6 = Sheets("倉庫在庫(記入用)").Cells(i, 4).Value
      Label7 = Sheets("倉庫在庫(記入用)").Cells(i, 5).Value
      Exit Sub
    End If
  Next i

  MsgBox "品番がありません!"

    TextBox1 = ""
    Label6 = ""
    Label7 = ""

  Cancel = True  '重要

End Sub
'----------------------------------------------------------------------

●TextBox1.SetFocus、及び、TextBox2.SetFocusは不要です。
●セルのValueプロパティ、TextBoxのTextプロパティは書くようにしましょう。

それから倉庫在庫の検索データが多い場合は、Forで回すより、Findメソッドの方が速いです。
ただ今回のように400データ程度では顕著な差は出ませんが。
以上です。
 

投稿日時 - 2007-02-08 22:23:05

お礼

思いどおりに動きました。
有難うございます。
親切な文面で勉強になりました。
KeyDownイベントしか知らなかったもので。
すみません、宜しければKeyDownとExitは
どのように使い分けるか教えていただけますか?

投稿日時 - 2007-02-09 11:48:35

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問