前回、「帳票フォームで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にしています。
少ないレコード数では、この処理を入れるのと入れないのであまり違いがみられませんが、レコード数が多くなってくると明らかに違いが出てきます。
スポンサーリンク