如何修复VBA运行时错误13(类型不匹配)
解决VBA日期筛选的运行时错误13(类型不匹配)
错误原因分析
你的代码存在两个关键问题引发类型不匹配:
Range("c7:c80").AutoFilter的Field参数(字段序号)写错了:该区域仅1列,字段序号应为1,而非你写的3,参数不匹配直接触发错误。- 变量
sDate和EDate定义为Long,若B4/D4单元格内容是文本格式的日期(而非标准日期格式),无法直接转换为长整数,也会导致类型不匹配。
修正后的代码
Sub BetweenDates() '(Filter data between 2 dates ) Dim sDate As Date Dim EDate As Date ' 先校验单元格是否为有效日期,避免转换错误 If IsDate(Range("B4").Value) And IsDate(Range("D4").Value) Then sDate = Range("B4").Value EDate = Range("D4").Value ' 单列筛选区域的字段序号设为1,直接用日期格式拼接筛选条件 Range("C7:C80").AutoFilter Field:=1, Criteria1:=">=" & sDate, Operator:=xlAnd, Criteria2:="<=" & EDate Else MsgBox "B4或D4不是有效的日期格式,请检查单元格内容!" End If End Sub
额外注意事项
- 确保B4和D4单元格设置为标准日期格式,避免输入文本型日期导致转换失败。
- 如果你的实际筛选区域是多列表格(比如包含A、B、C列),可根据C列在表格中的位置调整
Field参数(比如C列是第3列就设为3),但当前代码的筛选范围是单列C7:C80,字段序号必须为1。
内容的提问来源于stack exchange,提问作者Mohamed Amin
相关产品推荐
相关产品推荐

