#396 | 帳票形式サブフォームからメインフォームへの自動フォーカス移動 | フォーム、VBA | |
帳票形式のサブフォームを持ったメイン/サブフォームにおいては、サブフォーム側にいったんフォーカスが移動すると、マウス操作などを行わなければメインフォーム側にフォーカスを戻すことができません。フォーカス移動用のキーであるTabキーやEnterキーで自動的にメインフォームにフォーカスが戻ることはありません。ここでは、そのような動作の制限をVBAで変更し、サブフォームからメインフォームへのフォーカス移動を実現する方法を紹介します。 ※ただしサブフォームが"データシートビュー"で表示されているときは、サブフォームの最終レコードの最後のコントロールでTabキーなどを押すことによってフォーカスがメインフォームに戻ります(このときメイン側の「Tabキー移動」プロパティの設定によっては次レコードへの移動も起こります)。したがってその場合には、このような特別なことを行う必要はありません。 ここではまず、次のようなメイン/サブフォームでの動きを考えてみます。 フォームを開いた直後、TabキーもしくはEnterキーを押していくと、次のような順でフォーカスが移動します。
そこで、『サブフォームのカレントレコードが画面最下の新規レコードである状態で、「割引」のコントロールから次のコントロールに移動しようとしたら、強制的にメインフォーム側にフォーカスを移動させる』という考え方でプログラムを付け加えてみます。 サブフォームの「割引」コントロールからフォーカスが失われたタイミングでアクションを起こせばよいので、次のような"LostFocus/フォーカス喪失後"イベントプロシージャをサブフォームのモジュールに記述します。 Private Sub 割引_LostFocus() '割引のフォーカス喪失後 '新規レコードなら処理を実行 If Me.NewRecord Then '再度サブフォームにフォーカスが移動したときに備えて 'サブフォームの先頭レコードの先頭コントロールにフォーカス移動 Me.Recordset.MoveFirst Me!受注コード.SetFocus 'メインフォームにフォーカス移動 Parent!受注コード.SetFocus End If End Sub なお、サブフォームが新規レコードの追加ができないようなデザインになっている場合、あるいは既存の最後のレコードからメインフォームにフォーカスを戻したい場合には、カレントレコードが新規レコードではなく既存の最後のレコードであるときに同様のアクションを起 こす必要があります。そのような場合には、次のようなコードで"最終レコードである"ことを検出します。 Private Sub 割引_LostFocus() '割引のフォーカス喪失後 '最後のレコードなら処理を実行 If Me.CurrentRecord = Me.Recordset.RecordCount Then Me.Recordset.MoveFirst Me!受注コード.SetFocus Parent!受注コード.SetFocus End If End Sub |
|||
|
Copyright © T'sWare All rights reserved |