尝试在VBA中进行过滤时的转置日期

时间:2019-05-09 13:52:21

标签: excel vba date

我正在尝试使用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

因此,我得到一个转置日期,如果我尝试强制使用格式,则会溢出。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

如果您在单元格中使用日期值(例如= TODAY()的结果),则可以将Range.AutofilterCDbl进行比较。

通过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)