You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access连续窗体Requery后返回记录原显示位置的实现方法

抱歉,我的英文内容由谷歌翻译生成。

Access连续窗体刷新后保持记录原有可视位置的实现方案

长久以来这个问题一直困扰着我,在所有相关讨论渠道都未找到对应的解决方案,因此我将自己摸索出的解决方法公开,供大家参考使用。

常规刷新定位方案的体验缺陷

在使用Access连续窗体时,有时需要刷新窗体数据源,通常大家会借助书签等方式定位回刷新前所在的记录,但存在明显体验问题:

假设当前窗体显示第40-60条记录,光标停在第45条记录(即当前可视区域内的第5行),刷新后重新定位到第45条记录时,该记录不会显示在原来的第5行位置,而是会显示在可视区域的最顶部,容易给用户造成混淆。

我一直尝试寻找实现方案,让刷新后目标记录仍保持在可视区域内的原有位置,用户感知不到刷新带来的位置变化。

实现原理

可以通过CurrentSectionTop属性实现该需求:该属性表示当前位置相对于窗体上边缘的坐标,计算偏移量时需要减去窗体页眉的高度。

具体实现代码

Const MaxRecordInViwe = 50
Const ValuePerLine = 564

MySelTop = Me.SelTop
CurrentRowInViwe = (Me.CurrentSectionTop - Me.FormHeader.Height) / ValuePerLine

Me.Requery

Me.SelTop = (MySelTop - MyCurrentRowInViwe) + MaxRecordInViwe
Me.SelTop = MySelTop - MyCurrentRowInViwe
Me.SelTop = MySelTop

参数适配方法

  • 如果你的窗体可视区域内可显示超过50条记录,可修改常量MaxRecordInViwe的默认值;如果可视区域显示条数少于50,保持默认值即可。
  • 常量ValuePerLine是适配我个人所用窗体的数值,我暂未找到对应的通用计算公式,大家可以通过以下步骤手动获取适配自己窗体的数值:
    • 定位到窗体第一条记录
    • 在VBA立即窗口输入以下代码,获取基准坐标值:
      ?Form_table1.CurrentSectionTop - Form_Table1.FormHeader.Height
      
    • 在窗体中定位到第二条记录
    • 回到立即窗口输入以下代码,计算单行对应的坐标差值:
      ?(Form_table1.CurrentSectionTop- Form_Table1.FormHeader.Height)- {上一步得到的结果})
      
    • 将最终得到的计算结果赋值给ValuePerLine常量即可。

内容的提问来源于stack exchange,提问作者יעקב טורק

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:33:20