如何使用变量(WEEKNUM)自动过滤

时间:2019-05-04 22:09:49

标签: excel vba

我正在尝试创建一个宏,用于根据当前星期数过滤表格。

我将变量'ThisWeek'设置为当前星期数:

Dim ThisWeek As Variant

ThisWeek = "=WeekNum(TODAY())"

这将产生星期数,我正在过滤的列中有一个星期数列表(根据另一列中的日期显示WEEKNUM公式的结果)

但是我无法使用以下代码来获取接受变量的条件:

Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=ThisWeek

我已经在网上搜索了两个小时,并尝试了很多变量,包括:

Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=">=" & ThisWeek, Operator:=xlAnd, Criteria2:="<=" & ThisWeek

我也尝试过将变量类型更改为整数。

但是没有运气..任何帮助,我们将不胜感激!

谢谢

3 个答案:

答案 0 :(得分:0)

自动过滤器最好的方法是将TODAY()(VBA中的日期)解析为开始日期和结束日期,然后将自动过滤器的Criteria1和Criteria2参数与{{1} }。使用Operator:=xlAnd函数和一些小数学运算,在VBA中查找上一个星期日(或任何其他DOW)和下一个星期六是一件小事。

“工作日”和“日期”功能用于始终解析动态日期,例如5月的第二个星期日或11月的第三个星期一。

答案 1 :(得分:0)

在VBA中,您必须使用Date()而不是TODAY(),并且要获取星期数,请使用DatePart()

您必须检查您所在的国家/地区如何计算周数,并修改此功能的参数firstweekofyear

在欧洲e。 G。在VBA中使用DatePart("ww", Date, vbMonday, vbFirstFourDays)
工作表中对应的星期数功能是WEEKNUM(...,21)。

Dim ThisWeek As Integer
ThisWeek = DatePart("ww", Date, vbMonday, vbFirstFourDays)
Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=ThisWeek

答案 2 :(得分:0)

也可以是evaluated(不确定是否需要"=" &部分):

ThisWeek = "=" & [WeekNum(TODAY())]