查询Excel表格时Recordset排序功能失效问题求助
问题排查:VBA读取Excel数据排序失效
核心原因
你的SQL语句中ORDER BY子句错误地用单引号包裹列名,导致数据库将这些内容识别为字符串常量,而非要排序的列。单引号在SQL中用于定义字符串字面量,因此排序逻辑并未作用到目标列上。
修正方案
将ORDER BY中的列名改用**方括号[]**包裹(因为列名包含空格),或者如果列名无空格可直接使用列名:
修正后的SQL语句:
SQL = "select * from [Inputs_Source Table$B3:AL2232] WHERE [Worksheet] = 'Global Inputs' AND [Section] = 'GA' ORDER BY [Worksheet order],[SubSection order],[Section order]"
额外确认点
- 确保
RangeToRecordset函数的HasHeader参数为"Yes"(当前默认值正确),这样OLEDB驱动会将数据区域的第一行(B3行)识别为列名,而非数据行。 - 确认Excel表格中确实存在
Worksheet order、SubSection order、Section order这三个列名,且拼写、空格完全匹配。
完整修正后的调用示例
ExcelFile = ThisWorkbook.FullName SQL = "select * from [Inputs_Source Table$B3:AL2232] WHERE [Worksheet] = 'Global Inputs' AND [Section] = 'GA' ORDER BY [Worksheet order],[SubSection order],[Section order]" Set rs = RangeToRecordset(ExcelFile, SQL)
内容的提问来源于stack exchange,提问作者Dumitru Daniel
相关产品推荐
相关产品推荐

