ACCESSでRequeryを行っても一覧の状態が変わらないようにするには?
■1番、簡単な方法
Requeryしたいデータシートを、サブフォームとして作成します。
そして、サブフォーム名ではなく、サブフォームのコントロール名
に対してRequeryを実行すると、な、なんと、カーソル位置が変わりません。
で、サブフォームのコントロール名とは、標準で「埋め込み1」などの
名前で作成されるコントロールです。
<サンプル>
1)サブフォームからRequery実行
Private Sub Form_AfterUpdate() Me.Painting = False '画面描画をOFFにする Me.Parent![埋め込み1].Requery Me.Painting = True '画面描画をONにする End Sub
2)親フォームからRequery実行
Private Sub Form_AfterUpdate() Me.Painting = False '画面描画をOFFにする Me![埋め込み1].Requery Me.Painting = True '画面描画をONにする End Sub
補足:サブフォームをウイザードを使って作成すると、サブフォーム・コントロール名はサブフォーム名と同一になります。
Me![埋め込み1].Requery を Me![埋め込み1].form.Requery に変更すると、Requeryした時、先頭行にジャンプします。
■一般的な方法
単一のフォームの場合、上記の方法は使えません。
そこで、行の位置、列の位置をRequery前に保存しておいて、
Requery後に復元する古典的な方法です。
<サンプル>
Private Sub Form_AfterUpdate() Dim varBM As Variant '行位置用の変数 Dim varSF As String '列位置用の変数 Me.Painting = False '画面描画をOFFにする varBM = Me.Bookmark '行位置を保存 varSF = Me.ActiveControl.Name '列位置を保存 Me.Requery '再クエリー実行 Me.Bookmark = varBM '行位置を復元 Me.Controls(varSF).SetFocus '列位置を復元する Me.Painting = True '画面描画をONにする End Sub
◆サンプルDB Download
素晴らしい!