ここから本文です

アクセスのフォーム画面をrequeryすると、requery後にフォーム画面の最上部、もし...

chu********さん

2017/10/1801:48:15

アクセスのフォーム画面をrequeryすると、requery後にフォーム画面の最上部、もしくは、タブオーダーで一番目に指定されているコントロールの位置に移動してしまいます。

requery後も、同じ位置に戻るようにすることは可能でしょうか?
ネットで検索して次のような方法を見つけましたが、うまくいきません。

Dim varBM As Variant
varBM = Me.Bookmark
Me.Requery
Me.Bookmark = varBM

また、このフォームにはサブフォームが3つ組み込んでありますが、フォーカスがサブフォームのレコードに行っているときには、requery後もそのレコードに戻るようにしたいです。

このようなことは可能でしょうか?

閲覧数:
811
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

ony********さん

2017/10/1811:22:21

このコードだとレコード位置は復元されますが、最初のコントロールに戻ってしまいますね。

その時点のActiveControlの名前も保管し、再クエリ後にSetFocusで戻す必要がありますが、

別のボタンで再クエリのイベントを起こさせているとしたら、ActiveControlがボタンに移ってしまうのでうまくいきません。




例えば、ボタンに移動せずに各コントロールのダブルクリックで、再クエリを実行するのであれば、うまくいくかと思います。

下記のようなコードをメインフォームの全コントロールのダブルクリックイベントに記述する必要があります。

Dim varBM As Variant
Dim strCtrl As String

varBM = Me.Bookmark '行の保存
strCtrl = Me.ActiveControl.NAME 'コントロ―ル名の保存

Me.Requery ’再クエリ

Me.Bookmark = varBM '行の復元
Me(strCtrl).SetFocus 'フォーカスの復元




さらに、サブフォームもフォーカスを復元するには、再クエリの起動がメインフォームでかけられている場合、サブフォーム上のアクティブコントロール名は

Me![サブフォームコントロール名].Form.ActiveControl.NAME

で取得できるので、下記のように処理を増やします。


Dim varMainBM As Variant '①メインフォーム用ブックマーク保存用
Dim strMainCtrl As String '②メインフォーム用アクティブコントロール名保存用
Dim varSubBM As Variant '③サブフォーム用ブックマーク保存用
Dim strSubCtrl As String '④サブフォーム用アクティブコントロール名保存用

varMainBM = Me.Bookmark '①保存
strMainCtrl = Me.ActiveControl.NAME '②保存
varSubBM = Me![サブフォームコントロール名].Form.Bookmark '③保存
strSubCtrl = Me![サブフォームコントロール名].Form.ActiveControl.NAME '④保存

Me.Requery '再クエリ

Me![サブフォームコントロール名].Form.Bookmark = varSubBM '③復元
Me![サブフォームコントロール名].Form(strSubCtrl).SetFocus '④復元
Me.Bookmark = varMainBM '①復元
Me(strMainCtrl).SetFocus '②復元

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる