VBA日后variables总是3个月

我试图find一种方法让VBA从系统的当前date(也是未来一个月的第一天)计算未来3个月的date。

这将在下面的filter中使用。

Workbooks(FN1).Worksheets("Sheet1").Range(Final1).AutoFilter Field:=18, Operator:= _ xlFilterValues, Criteria2:=Array(1, "9/1/2017") 

基本上我需要的是用计算的variablesreplace“9/1/2017”

任何帮助将不胜感激。 谢谢!

编辑:使用下面的代码在最后工作很好。 但是,我发现一个问题让它更复杂一些。

 Workbooks(FN1).Worksheets("Sheet1").Range(Res).AutoFilter Field:=18, Operator:= _ xlFilterValues, Criteria2:=Array(1, DateSerial(Year(Date), Month(Date) + 3, 1)) 

似乎filter需要设置多年,而不仅仅是今年。 logging,它看起来像这样。

 ActiveSheet.Range("$A$4:$X$2767").AutoFilter Field:=18, Operator:= _ xlFilterValues, Criteria2:=Array(1, "9/1/2021", 1, "9/1/2020", 1, "9/1/2019", 1, _ "9/1/2018", 1, "9/1/2017", 1, "9/1/2016", 1, "9/1/2015", 1, "9/1/2014", 1, "9/1/2013") 

问题是,年份也会变化(例如:下个月可能没有2013年的数据源,但可能会增加2022年)。 所以问题变得更加复杂了,因为现在我需要一些在数据源Range(Res).Column("R")每年都会检查的东西,而且我假设它会循环遍历所有年份并检查月份的第一天3未来几个月。

或者说是有可能过滤一个月? 那么在9月份(在这种情况下)呢,在所有年份呢?

你可以直接这样做:

编辑1:根据您的评论。

 Criteria2:=Array(1, Format(DateAdd("m", 3, Date) - DatePart("d", Date) + 1, "m/d/yyyy")) 

另一种做法是使用DateSerial ,它返回指定年份,月份和date的date:

DateSerial(Year(Date), Month(Date) + 3, 1)

如果我正确地理解了你,你想自动获得本月的第一个月的date(即从现在开始的3个月)。 为此,您可以使用DateAddDateAdd函数的组合:

 Dim myFirstoftheMonth As Date myFirstoftheMonth = DateAdd("d", 1, WorksheetFunction.DateAdd(Date, 2)) 

之后,您可以使用myFirstoftheMonth在您的filter中replace硬编码的"9/1/2017"