如何按指定列对筛选后的记录进行排序?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
相关产品推荐
相关产品推荐

