#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 実行例: ■上記のプログラムを適用しない、通常の動き
■上記のプログラムを適用した場合の動き
|
|||
|
Copyright © T'sWare All rights reserved |