Enterキーを押したときにフォーカスを移動させない

f:id:accs2014:20181008003014p:plain:right:w400

 画像はFV関数を使って将来の資産額を計算するフォームの例です。
 このようなフォームで、値を入力するたびに次のフィールドに進むのではなく「同じフィールドに留まったまま何度も値を変えて結果の違いを確認したい」という場合がありますので、オプション設定による方法とVBAによる方法の2つを紹介します。


オプション設定による方法

f:id:accs2014:20181008003012p:plain:right:w450

 通常の設定変更により対応する方法です。
 先に注意点ですが、この設定はフォームだけでなくテーブルなど、すべてのオブジェクトに適用されてしまいますので、特定のフォームやコントロールで実現したい場合は下記のVBAによる方法を利用してください。

 さて、「ファイル」タブから「オプション」「クライアントの設定」と進み「Enterキー入力後の動作」の選択肢(デフォルトは「次のフィールド」)として「移動しない」を選択します。


f:id:accs2014:20181008003010p:plain:right:w400

 これでテキストボックス等への入力を行ってEnterキーで値を確定しても、次の(他の)コントロールにフォーカスが移動しなくなります。
 画像はフォームの「各期投資額」の値を変更したところですが、フォーカスは移動せず残ったままで計算結果には変更が反映されています。


 なお、Tabキーでの移動はできますので、キー入力によるフィールド移動を行いたい場合はそちらを使ってください(これは下記のVBAによる方法でも同様)。また、Tabキーをも封じたい場合はKeyDownイベントの利用が考えられます。次の記事が参考になるかもしれません。

www.accessdbstudy.net

VBA(SetOptionメソッド)による方法

f:id:accs2014:20181008003008p:plain:right:w450

 こちらは特定のフォームや特定のコントロールを選択して適用できる方法です。
 ここでは上記のフォーム(全体)のみに適用するものとして、フォームモジュールに次のように記します。



Option Compare Database

Private Sub Form_Activate()

Application.SetOption "Move After Enter", 0

End Sub

Private Sub Form_Deactivate()

Application.SetOption "Move After Enter", 1

End Sub


f:id:accs2014:20181008003006p:plain:right:w400

 これで、このフォームでのみEnterキーを押したときにフォーカスが移動しません。テーブル等でEnterキーを押したときは普通に次のフィールドに進みます。
 画像はフォームの「当初保有額」の値を変更したところですが、やはりフォーカスは移動せず残ったままで計算結果には変更が反映されています。
 また、特定のコントロールにのみ適用したい場合はコントロールのEnter/Exitイベントなどで同じようにSetOptionメソッドを用いれば可能です。
 ちなみにSetOptionメソッドの最後の数字を「2」にすると「次のレコード(に移動)」となります。