#668 データシートのEnterキーで次レコードに移動しないようにする フォーム、VBA

フォームには『Tabキー移動』というプロパティがあります。このプロパティは、フォーム上でタブ移動順が最後のコントロールでEnterキーやTabキーが押されたとき、あるいは先頭のコントロールでShift+Tabキーが押されたとき、次にフォーカスをどのレコードに移動させるかを指定するものです。

「すべてのレコード」を指定した場合、”次のレコード”のタブ移動順が先頭のコントロールに移動します。Shift+Tabキーの場合は”前のレコード”の最後のコントロールに移動します。そしてEnterキーなどを何度も押していくと次々と前後のレコードに移動していきます。

一方「カレントレコード」を指定した場合は、他のレコードには移動せず、現在のレコード内だけでフォーカスが移動します。タブ移動順が最後のコントロールでEnterキーを押せばそのレコードの先頭のコントロールに移動し、先頭のコントロールでShift+Tabキーを押せばそのレコードの最後のコントロールに移動します。


しかし、これは「単票フォーム」や「帳票フォーム」のみ有効で、「データシート」ビューでは機能しません。このプロパティに関わらず「すべてのレコード」の動きをします。

そこで、データシートでも「カレントレコード」のような動きをさせる、つまり最後のコントロールでEnterキーやTabキーを押した場合に次のレコードに移動するのではなく、そのレコード内で先頭のコントロールにフォーカスを戻す方法です。

それには、タブ移動順が最後と先頭のコントロールに次のような「KeyDown/キークリック時」イベントプロシージャを記述します。特定のキー操作をしたときにそのフォーカス先を強制的に指定することで、現在のレコード内でのみの移動が行われます。
   ※ここでは先頭が「商品コード」、最後が「仕入単価」という名前のテキストボックスとなっています。

Private Sub 仕入単価_KeyDown(KeyCode As Integer, Shift As Integer)
'[仕入単価]のキークリック時

  If (KeyCode = vbKeyReturn Or KeyCode = vbKeyTab) And (Shift And acShiftMask) = 0 Then
    'Enter/Tabキー(Shiftは押されていない)で先頭のコントロールにフォーカス移動
    Me!商品コード.SetFocus
  End If

End Sub

Private Sub 商品コード_KeyDown(KeyCode As Integer, Shift As Integer)
'[商品コード]のキークリック時

  If KeyCode = vbKeyTab And (Shift And acShiftMask) > 0 Then
    'Shift+Tabキーで最後のコントロールにフォーカス移動
    Me!仕入単価.SetFocus
  End If

End Sub


実行例:

■上記のプログラムを適用しない、通常の動き
  • 仕入単価でEnter




  • 商品コードでShift+Tab




■上記のプログラムを適用した場合の動き
  • 仕入単価でEnter




  • 商品コードでShift+Tab



| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved