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

如何对筛选后的ListBox结果按首列(ID)升序排序?

解决ListBox搜索结果按ID升序排序的VBA语法问题

你的问题核心出在ORDER BY语句的语法错误上,原代码里的排序行有多余的引号和逗号,导致SQL语句无效,咱们直接修正这部分就能解决问题:

修正后的完整代码

Private Sub searchTB_Change()
    Dim strSource As String, strSearch As String
    'code for searching records
    strSearch = Replace(searchTB.Text, "'", "''")
    strSource = "SELECT [ID], [VP_veiklioji], [VP_invented_name], [Pareisk_pav], [Par_gavimo_data], [Finished] " _
    & "FROM TerPar_Oldsys " _
    & "WHERE [ID] LIKE '*" & strSearch & "*' " _
    & "Or [VP_veiklioji] LIKE '*" & strSearch & "*' " _
    & "Or [VP_invented_name] LIKE '*" & strSearch & "*' " _
    & "Or [Pareisk_pav] LIKE '*" & strSearch & "*' " _
    & "Or [Par_gavimo_data] LIKE '*" & strSearch & "*' " _
    & "Or [Finished] LIKE '*" & strSearch & "*' " _
    & "ORDER BY [ID] ASC" ' 修正后的排序语句
    Me.oldListBox.ColumnWidths = "1.5 cm; 3 cm; 4 cm; 4 cm; 2 cm; 0.6 cm"
    Me.oldListBox.RowSource = strSource
End Sub

错误点解析

你原来的排序行& "ORDER BY" "[ID]" ASC,"有两个关键问题:

  1. 引号使用错误:"ORDER BY"后面直接拼接"[ID]"会导致SQL里出现ORDER BY[ID](缺少空格),而且不需要把[ID]用双引号单独括起来,正确写法是将排序规则整合成一个字符串片段"ORDER BY [ID] ASC"
  2. 末尾多余逗号:行尾的逗号会让SQL语句语法不完整,直接去掉即可

额外说明

如果你想尝试用DoCmd.SetOrderBy的方式实现排序,也可以在设置RowSource之后调用,示例如下:

Me.oldListBox.RowSource = strSource
DoCmd.SetOrderBy "[ID] ASC"

不过直接在SELECT语句里包含ORDER BY是更贴合你现有代码逻辑的方式,执行效率也更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:08:31