我正在尝试使用VBA在excel中按日期进行过滤,并且在进入过滤器时,日期会不断调换,将月和日替换为美国而不是欧洲日期。
表格中的日期格式为短日期,并且在文本框中输入的日期格式正确
dateselect是激活过滤器的复选框,datestart和datefinish是保存日期的文本框。
jar's file
我尝试在日期中添加格式,但是出现溢出错误
If dateselect = True Then
With Worksheets("Data").Range("C:C")
.AutoFilter field:=1, Operator:=xlAnd, Criteria1:=">=" & Datestart, Criteria2:="<=" & datefinish
End With
End If
因此,我得到一个转置日期,如果我尝试强制使用格式,则会溢出。我在做什么错了?
答案 0 :(得分:0)
如果您在单元格中使用日期值(例如= TODAY()的结果),则可以将Range.Autofilter
与CDbl
进行比较。
通过CDate
,您可以确保变量“ datestart”和“ datefinish”也是日期值。
CDbl
的工作原理几乎是完美的,因为日期值内部包含一个整数部分(自1900年以来的天数)及其小数点(一天的一部分,即小时,分钟,秒)。
With Worksheets("Data").Range("C:C")
.AutoFilter field:=1, _
Operator:=xlAnd, _
Criteria1:=">=" & CDbl(CDate(datestart)), _
Criteria2:="<=" & CDbl(CDate(datefinish))
End With
请注意,条件<,<=,>,> =,<>将像上面一样工作,但是如果必须将日期过滤为等于给定日期的单个,则使用简单的“ =。”。 ”。要么需要工作表中日期的确切字符串符号(取决于单元格的数字格式),要么需要以下格式,与日期格式无关:
With Worksheets("Data").Range("C:C")
.AutoFilter field:=1, _
Criteria1:="<=" & CDbl(myDate), Operator:=xlAnd, _
Criteria2:=">=" & CDbl(myDate)