Excel 如何从自动筛选VBA的当前日期中减去3天
我需要对excel中的日期进行筛选。标准是从当前日期减去3天,并且它应该显示在或等于之后的所有日期。我不确定我在下面的代码中做错了什么Excel 如何从自动筛选VBA的当前日期中减去3天,excel,vba,date,autofilter,Excel,Vba,Date,Autofilter,我需要对excel中的日期进行筛选。标准是从当前日期减去3天,并且它应该显示在或等于之后的所有日期。我不确定我在下面的代码中做错了什么 Sub filterTime() Dim currDate as Date, oldDate as Date currDate = Now oldDate = currDate - 3 ActiveSheet.Range("$A$1:$W$8722").AutoFilter Field:=19, Criterial:=_">=" & oldDat
Sub filterTime()
Dim currDate as Date, oldDate as Date
currDate = Now
oldDate = currDate - 3
ActiveSheet.Range("$A$1:$W$8722").AutoFilter Field:=19, Criterial:=_">=" & oldDate, Operator:=xlAnd
不要对
Date
值进行数学运算。DateTime
模块提供了特定于DateTime
的函数,使currDate
变量完全冗余。也就是说,DateAdd
函数-专门用于向给定的Date
值添加各种“时间单位”
Dim filterDate As Date
filterDate = DateTime.DateAdd("d", -3, DateTime.Now)
< > > <代码>日期>代码>值>代码>日期时间。现在将包含您可能不希望在过滤器中的时间部分(如果是这样的话,那么考虑使用<代码> DATETIME.DATE < /COD>)。通过将“>=”
与日期
值连接起来,可以隐式地将该日期
转换为字符串
,并由VBA决定该字符串表示形式的外观。使用Strings.Format
函数指定该字符串的显式格式:
Dim filterCriteria As String
filterCriteria = ">=" & Strings.Format(filterDate,"mm/dd/yyyy")
ActiveSheet.Range("$A$1:$W$8722").AutoFilter Field:=19, Criterial:=filterCriteria, Operator:=xlAnd
不要对
Date
值进行数学运算。DateTime
模块提供了特定于DateTime
的函数,使currDate
变量完全冗余。也就是说,DateAdd
函数-专门用于向给定的Date
值添加各种“时间单位”
Dim filterDate As Date
filterDate = DateTime.DateAdd("d", -3, DateTime.Now)
< > > <代码>日期>代码>值>代码>日期时间。现在将包含您可能不希望在过滤器中的时间部分(如果是这样的话,那么考虑使用<代码> DATETIME.DATE < /COD>)。通过将“>=”
与日期
值连接起来,可以隐式地将该日期
转换为字符串
,并由VBA决定该字符串表示形式的外观。使用Strings.Format
函数指定该字符串的显式格式:
Dim filterCriteria As String
filterCriteria = ">=" & Strings.Format(filterDate,"mm/dd/yyyy")
ActiveSheet.Range("$A$1:$W$8722").AutoFilter Field:=19, Criterial:=filterCriteria, Operator:=xlAnd
是的,我刚刚更改了它。它现在可以工作了吗?删除
。
,除非你有两行。它告诉vba继续到下一行。回应@ScottCraner的评论,将Criterial:=\ucode>更改为Criteria1:=
。下划线是一个行延续标记,前面必须有空格,后面必须有新行。注Criteria1
不是Criterial
。命名参数必须与为其提供的参数名称匹配。没有Criterial
(小写L
)。有些不对劲,它说“需要对象”是为了哪个行?我无法用问题中的代码重现那个问题。也就是说,您根本不需要currDate
,只需执行oldDate=DateTime.DateAdd(“d”、-3,DateTime.Now)
,我会尽量避免Criteria1
参数中的隐式字符串转换,使用Format
函数可以显式指定日期的字符串表示形式。是的,我刚刚更改了它。现在可以使用了吗?删除\u
,除非该行在两行上。它告诉vba继续到下一行。回应@ScottCraner的评论,将Criterial:=\ucode>更改为Criteria1:=
。下划线是一个行延续标记,前面必须有空格,后面必须有新行。注Criteria1
不是Criterial
。命名参数必须与为其提供的参数名称匹配。没有Criterial
(小写L
)。有些不对劲,它说“需要对象”是为了哪个行?我无法用问题中的代码重现那个问题。也就是说,您根本不需要currDate
,只需执行oldDate=DateTime.DateAdd(“d”、-3,DateTime.Now)
,我将尝试避免Criteria1
参数中的隐式字符串转换,使用Format
函数来显式指定日期的字符串表示形式。谢谢,正是我需要的!谢谢,这正是我需要的!