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

如何按指定列对筛选后的记录进行排序?Access VBA筛选代码排序失效问题咨询

解决Access子窗体按Amount列降序排序的问题

当然可以实现按[Amount]列从大到小排序!你之前用Me.OrderBy没生效,大概率是因为你操作的是主窗体的排序属性,而不是子窗体的。子窗体的记录集是独立的,得针对子窗体的Form对象来设置排序规则,下面给你两种可行的解决方案:

方法1:直接在SQL语句中加入排序(最推荐)

这种方式最直接,让查询返回的结果本身就是排序好的,不需要额外设置排序属性。修改你的RecordSource赋值语句:

Me.ItemsQuerySubform.Form.RecordSource = _
"SELECT * FROM ItemsQuery WHERE ItemCode LIKE 'B*' ORDER BY Amount DESC"

这样子窗体加载的记录会直接按Amount从大到小排列,不需要再额外处理排序。

方法2:通过子窗体的OrderBy属性设置

如果你不想修改SQL语句,可以在设置完RecordSource后,单独给子窗体开启排序:

Me.Filter = ""
Me.FilterOn = False
Me.ItemsQuerySubform.Form.RecordSource = _
"SELECT * FROM ItemsQuery WHERE ItemCode LIKE 'B*'"
' 针对子窗体设置排序
Me.ItemsQuerySubform.Form.OrderBy = "Amount DESC"
Me.ItemsQuerySubform.Form.OrderByOn = True

这里要注意两个关键点:

  • 必须操作Me.ItemsQuerySubform.Form的OrderBy属性,而不是主窗体的Me.OrderBy——因为子窗体的记录集和主窗体是完全分离的
  • 别忘了设置OrderByOn = True,否则排序规则只会被保存,不会实际生效

另外提一句:你代码里最后一行的Me.FilterOn = True其实是多余的,因为你已经给子窗体的RecordSource加了WHERE筛选条件,主窗体的Filter对这个子窗体的独立记录源不会产生影响哦。

内容的提问来源于stack exchange,提问作者SeeeeS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:07:40