VBA获取日期变量将来总是3个月

时间:2017-06-09 07:37:23

标签: excel vba excel-vba

我正试图找到一种方法让VBA从系统的当前日期(也就是那个月的第一天)计算未来3个月的日期。

然后将在下面的过滤器中使用。

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

基本上我需要的是用计算的变量替换“9/1/2017”

非常感谢任何帮助。谢谢!

编辑:最终使用下面的代码,效果很好。但是,我刚刚发现了一个问题,使其更加复杂。

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

似乎过滤器需要在多年内设置,而不仅仅是当前年份。记录下来,它看起来像这样。

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个月的第一天。

或者更确切地说,可以在月份过滤?所以它在所有年份都选择了九月(在这种情况下)?

3 个答案:

答案 0 :(得分:1)

您可以直接执行此操作:

编辑1:根据您的评论。

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

答案 1 :(得分:1)

另一种方法是使用DateSerial返回指定年,月和日的日期:

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

答案 2 :(得分:0)

如果我理解正确,您希望自动获取该月的第一天(即从现在开始的3个月)的日期。为此,您可以使用DateAddDateAdd函数的组合:

Dim myFirstoftheMonth As Date

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

之后,您可以使用过滤器中的"9/1/2017"替换硬编码的myFirstoftheMonth