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

EnterキーとTabキーが押された場合、キークリック時のイベントで次のレコードに移動させないVBAを作成します。

BackHomeへ BackAccessフォームへ


フォームの最後のコントロールでEnterキーかTabキーを押すと、自動的に次のレコードへ移動します。
ここではキークリック時のイベントにVBAを入力し、移動しないようにするか、先頭のコントロールに移動するようにします。
次に掲載している「VBA:フォームのサイズに追従してサブフォームのサイズを変更する」も参照してください。




商品入力フォームです。
このフォームの最後のコントロールの「単位」で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