PowerQuery生成的Excel表格VBA日期筛选无结果,手动筛选正常求助
问题描述
通过PowerQuery创建的表格,日期列数据类型已设为「Date」,手动筛选日期列能正常得到结果,但用VBA代码筛选两列日期时,结果始终为空。字符串筛选功能正常,已尝试过CDate()函数、用.Value2替代.Value,问题仍未解决。
原VBA代码:
Sub ExecuteFilters() Dim Start_Date As Date Dim End_date As Date Start_Date = CDate(ThisWorkbook.Worksheets("VBA2").Range("F2").Value2) End_date = CDate(ThisWorkbook.Worksheets("VBA2").Range("F3").Value2) ThisWorkbook.Worksheets("Employee View").ListObjects("Employee_View_Table").Range.AutoFilter Field:=2, _ Criteria1:=">=" & Start_Date ThisWorkbook.Worksheets("Employee View").ListObjects("Employee_View_Table").Range.AutoFilter Field:=3, _ Criteria1:="<=" & End_date End Sub
问题原因与解决方法
问题出在VBA中直接拼接日期变量生成筛选条件时,会受系统区域日期格式的影响,导致筛选条件的字符串格式和PowerQuery生成的日期列内部识别格式不匹配,从而筛选不到数据。
解决方法是将日期变量转换为**通用日期格式(yyyy-mm-dd)**的字符串后再拼接筛选条件,修改后的代码如下:
Sub ExecuteFilters() Dim Start_Date As Date Dim End_date As Date Start_Date = CDate(ThisWorkbook.Worksheets("VBA2").Range("F2").Value2) End_date = CDate(ThisWorkbook.Worksheets("VBA2").Range("F3").Value2) ' 将日期转为yyyy-mm-dd格式的字符串,确保筛选条件格式统一 ThisWorkbook.Worksheets("Employee View").ListObjects("Employee_View_Table").Range.AutoFilter Field:=2, _ Criteria1:=">=" & Format(Start_Date, "yyyy-mm-dd") ThisWorkbook.Worksheets("Employee View").ListObjects("Employee_View_Table").Range.AutoFilter Field:=3, _ Criteria1:="<=" & Format(End_date, "yyyy-mm-dd") End Sub
修改后,筛选条件的日期格式会和Excel内部存储的日期格式兼容,就能正确筛选出符合条件的数据。
内容的提问来源于stack exchange,提问作者Carlsberg789
相关产品推荐
相关产品推荐

