前回、「帳票フォームでRequeryを行ってもレコードの表示位置が変わらないようにする」方法を書きましたが、この方法だとレコード件数が多くなってくると画面のチラつきが気になってきます。
このような場合、フォームのPaintingプロパティを一時的にOFFにして描画を止めることによって画面のチラつきを抑えることが出来ます。
Private Sub buttonRequery_Click() Dim headerHeight As Long Dim curTop As Long Dim curRecNum As Long Dim topRecNum As Long Me.ID.SetFocus curRecNum = Me.CurrentRecord headerHeight = Int(Me.Section("フォームヘッダー").Height / Me.Section("詳細").Height) curTop = Me.CurrentSectionTop topRecNum = curRecNum - (Int(curTop / Me.Section("詳細").Height) - headerHeight) 'フォームの描画をOFF Me.Painting = False '再表示 Me.Requery '表示の復元 DoCmd.GoToRecord acActiveDataObject, , acLast DoCmd.GoToRecord acActiveDataObject, , acGoTo, topRecNum DoCmd.GoToRecord acActiveDataObject, , acGoTo, curRecNum 'フォームの再描画をON Me.Painting = True End Sub
Requeryの前に「Painting = False」で描画をOFFにして、レコードの表示位置を復元したあとに「Me.Painting = True」で再描画をONにしています。
少ないレコード数では、この処理を入れるのと入れないのであまり違いがみられませんが、レコード数が多くなってくると明らかに違いが出てきます。
スポンサーリンク