VBAのEXITでのエラー
エクセルのフォームで入力したデータをシートに保存しようとしています。
ID番号でシートからvlookupで検索を行い、データがあれば自動で個人情報を入力します。マウス操作無しで連続入力したいので、一度登録ボタンをクリックし、シート最下行に登録したら、その後タブをIDテキストボックスにフォーカスします。Private Sub TextBoxID_Exit(ByVal Cancel As MSForms.ReturnBoolean)にコマンドを記入しているのですが、終了する際にテキストボックスに値がないためエラーが発生します。どうすればエラー回避できるでしょうか?フォームの画像とコマンドの一部を下記に記入します。よろしくお願いします。
フォーカスがIDにある状態で終了ボタンを押すとexitプロシージャが発生するためのエラーだと思うんですが、どうでしょうか?
うまく説明できていないかもしれませんがよろしくお願いします。
*****************************************************************
Private Sub TextBoxID_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ID = TextBoxID.Text 'テキストボックスIDの値を取得
On Error GoTo ErrHdl '下記コマンドvlookupがエラーの場合ErrHdl処理する
Worksheets("data").Activate 'dataシートをアクティブにする
With ActiveSheet
TextBoxシメイ.Value = Application.WorksheetFunction.VLookup(ID, Range("b2:E65536"), 2, False)
TextBox誕生日.Value = Application.WorksheetFunction.VLookup(ID, Range("b2:E65536"), 3, False)
sex = Application.WorksheetFunction.VLookup(ID, Range("b2:E65536"), 4, False)
If sex = "M" Then
OptionButton男.Value = True
Else
OptionButton女.Value = True
End If
TextBox体重.SetFocus
End With
Exit Sub
ErrHdl: 'IDがなかった場合の処理
If TextBoxシメイ.Value = "" Then
MsgBox "新規です"
Exit Sub
End If
End Sub
**************************************************************************************
Private Sub CommandButton登録_Click()
With Worksheets("data")
lastrow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 '最終行にデータを追加する
.Cells(lastrow, 1).Value = TextBox撮影日.Text '最終行の1列目の値
.Cells(lastrow, 2).Value = TextBoxID.Text
.Cells(lastrow, 3).Value = TextBoxシメイ.Text
.Cells(lastrow, 4).Value = TextBox誕生日.Text
.Cells(lastrow, 5).Value = sex
.Cells(lastrow, 6).Value = TextBox体重.Text
.Cells(lastrow, 7).Value = ComboBox撮影区分.Text
.Cells(lastrow, 8).Value = ComboBox撮影部位.Text
.Cells(lastrow, 9).Value = TextBoxFOV.Text
.Cells(lastrow, 10).Value = TextBox寝台高.Text
.Cells(lastrow, 11).Value = TextBoxDLP.Text
.Cells(lastrow, 12).Value = TextBoxCTDI.Text
.Cells(lastrow, 13).Value = TextBox電圧.Text
.Cells(lastrow, 14).Value = TextBoxmAs.Text
End With
'TextBox撮影日.Text = ""
TextBoxID.Text = ""
TextBoxシメイ.Text = ""
TextBox誕生日.Text = ""
OptionButton男.Value = False
OptionButton女.Value = False
TextBox体重.Text = ""
ComboBox撮影区分.Text = ""
ComboBox撮影部位.Text = ""
TextBoxFOV.Text = ""
TextBox寝台高.Text = ""
TextBoxDLP.Text = ""
TextBoxCTDI.Text = ""
TextBox電圧.Text = ""
TextBoxmAs.Text = ""
Me.ComboBox撮影区分.Text = 区分 '初期値を再設定(この変数は他で宣言済み)
Me.ComboBox撮影部位.Text = 部位
Me.TextBox電圧.Text = 電圧
TextBoxID.SetFocus 'TextBoxIDに移動
End Sub
*****************************************************************************
Private Sub CommandButton終了_Click()
Unload UserForm2 'フォームを消去
End Sub
**********************************************************************************
お礼
まだお聞きしたいことがあるのですが どうすればいいのか追加の質問などの仕方がわかりませんのでいったん終了にして改めて質問します。 取り敢えず 有難う御座いました。
補足
早速のご回答有難う御座いました。 状況は ご教示の Microsoftのサイト で理解できました。 >別のイベントでカーソルを移動するようにコードを作り直すしかないと思います。 についてですが ご教示頂けるものがあればよろしくお願いします。テストしてみます。 Private Sub ComboBox3_Change() UserForm7.TextBox8.SetFocus End Sub ではだめでした。 >全体のコードがないのでどのように書き直べきかは解りません。 についてですが 制限字数内に入りそうですが観ていただく様にするには少し時間が必要ですので よろしくお願いします。