Access VBA:フォームの最後のコントロール入力後、次のレコードに移動させない

フォームの最後のコントロールでEnterキーかTabキーを押すと、自動的に次のレコードへ移動します。ここではキークリック時のイベントにVBAを入力し、移動しないようにするか、先頭のコントロールに移動するようにします。

スポンサーリンク




BackHomeへ BackAccessフォームへ

商品入力フォームです。
このフォームの最後のコントロールの「単位」でEnterキーかTabキーを押します。
フォームの最後のコントロールでEnterキーかTabキーを押す

すると次のレコードに移動してしまいます。
次々と入力するする場合は便利ですが、例えばレコードが1件しかないテーブルなどでは、新規レコード入力画面になってしまいバグの原因になる可能性があります。
そこで、EnterキーとTabキーが押された場合、別の処理を行うVBAを作成します。
次のレコードに移動する

EnterキーとTabキーが押された場合、次のレコードに移動させないVBA

フォームをデザインビューで開き、最後のコントロールを選択します。
1.プロパティシートのキークリック時でイベントプロシージャを選択します。
2.右の[…]ボタンをクリックします。
キークリック時でイベントプロシージャを選択

キークリック時のイベントプロシージャは、KeyDown(KeyCode As Integer, Shift As Integer)になります。
KeyCodeには、押されたキーのコードが入っています。
Shiftには、ShiftキーとCtrlキーの状態が入っています。

EnterキーとTabキーを無視するVBAです。
EnterキーとTabキーを無視するVBA

・Enterキーの定数は、vbKeyReturn(13)になります。
・Tabキーの定数は、vbKeyTab(9)になります。
・KeyCodeがEnterキーかTabキーの場合、KeyCodeを0にし何もしないようにしています。

Private Sub 単位_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
        KeyCode = 0
    End If
End Sub

最初のコントロールの商品IDに移動するようにしたVBAです。
最初のコントロールの商品IDに移動するようにしたVBA

・SetFocusで指定したコントロールに移動できます。

Private Sub 単位_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
        Me!商品ID.SetFocus
    End If
End Sub

スポンサーリンク




BackHomeへ BackAccessフォームへ

Copyright(C) FeedSoft