Access VBA中ApplyFilter日期筛选失效问题求助及解决过程
Access中RF表日期筛选问题的解决过程
问题需求
需要筛选Access数据库中RF表内,[Fecha envío](发送日期)字段在2022年1月1日之后的记录,后续用于数据导出,但初始编写的筛选代码运行失效。
初始错误代码
Function Filter() DoCmd.OpenTable "RF", acViewNormal, acEdit DoCmd.ApplyFilter Format("[Fecha envío]", "dd-mm-yyyy") & "<#" & Format(1 - 1 - 2022, "dd-mm-yyyy") & "#" End Function
错误点说明
- 日期写法错误:
1 - 1 - 2022是数值计算(结果为-2022),并非日期常量,应使用#1/1/2022#表示日期 - 比较符号错误:需求是筛选2022年1月1日之后的记录,却使用了
<(小于)符号 - 格式化字段错误:对字段名
[Fecha envío]使用Format函数会将其转为字符串,无法正确进行日期比较 - ApplyFilter语法错误:第一个参数若为筛选条件,无需额外格式化字段,应直接引用字段名
数据示例
| 发送日期 (日-月-年) |
|---|
| 05-02-2018 |
| 01-04-2021 |
| 31-03-2022 |
| 23-03-2022 |
中间修改尝试
尝试修改后的代码仍存在问题:
DoCmd.ApplyFilter Format([Fecha envío], "d-m-yyyy") > Format(#1/1/2022#, "d-m-yyyy")
问题说明
将日期转为字符串后进行比较属于字符串字典序比较,而非日期逻辑比较,会出现错误判断(例如"10-01-2021"字符串会被判定为大于"01-01-2022",但实际日期更早)。
最终解决代码
DoCmd.ApplyFilter , "[Fecha envío]>=#" & Format(#1/1/2022#, "d-m-yyyy") & "#"
正确原因说明
- 直接引用字段名
[Fecha envío],保持日期类型进行比较 - 使用
>=#...#的Access日期比较语法,确保是日期逻辑判断 - ApplyFilter第一个参数留空(表示直接使用筛选条件),符合函数语法要求
内容的提问来源于stack exchange,提问作者Alexander Martínez
相关产品推荐
相关产品推荐

