选择小于特定日期的日期

时间:2017-08-15 20:44:42

标签: excel-vba vba excel

我为每日报告录制了一个宏。当具有不同生效日期的新报告时,它仅捕获我记录的宏中指示的特定报告。

我希望捕获“覆盖期之前的所有日期”,即在单元格D2(8/1/2017)中。该日期的每个月都会更改为当前的保险期限。

我的问题:

  • 对于Criteria2“帐户注册”和“帐户重新安装”:而不是数组(仅包含下面的日期),是否有代码表示日期小于单元格D2中的覆盖期限?

  • 是否有其他方法可以选择整个工作表而不是:Rows("1:1000").Select

我想提前感谢你。

Option Explicit

Sub AAHDAILY()
'
' AAHDAILY Macro
'
    Sheets("original data").Select
    ActiveSheet.Range("$A$1:$AA$35").AutoFilter Field:=12, Criteria1:= _
        "ACCT ENROLL"
    ActiveSheet.Range("$A$1:$AA$35").AutoFilter Field:=14, Operator:= _
        xlFilterValues, Criteria2:=Array(0, "10/1/2015", 0, "6/1/2014", 0, "4/1/2013", 0, _
        "1/1/2007")  
    Rows("1:1000").Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Range("E15").Select
    ActiveSheet.Name = "Retro Enrolls"
'
    Sheets("original data").Select
    ActiveSheet.Range("$A$1:$AA$35").AutoFilter Field:=12, Criteria1:= _
        "ACCT REINST"
    ActiveSheet.Range("$A$1:$AA$35").AutoFilter Field:=14, Operator:= _
        xlFilterValues, Criteria2:=Array(0, "11/1/2015")
    Rows("1:1000").Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Range("F29").Select
    ActiveSheet.Name = "Retro Reinstates"  
End Sub

1 个答案:

答案 0 :(得分:0)

假设列N包含日期(而不仅仅是看起来像日期的文本)并且该单元格D2还包含日期,则可以更改

ActiveSheet.Range("$A$1:$AA$35").AutoFilter Field:=14, Operator:= _
    xlFilterValues, Criteria2:=Array(0, "10/1/2015", 0, "6/1/2014", 0, "4/1/2013", 0, _
    "1/1/2007")  

ActiveSheet.Range("$A$1:$AA$35").AutoFilter Field:=14, _
                                            Operator:=xlAnd, _
                                            Criteria1:="<" & ActiveSheet.Range("D2").Value2

即。标准是小于单元格D2中日期的任何日期。

重构代码会给出:

Option Explicit

Sub AAHDAILY()
'
' AAHDAILY Macro
'
    'Use a "With" block to save typing
    With Worksheets("original data").Range("$A$1:$AA$35")
        .AutoFilter Field:=12, _
                    Criteria1:="ACCT ENROLL"
        .AutoFilter Field:=14, _
                    Operator:=xlAnd, _
                    Criteria1:="<" & .Range("D2").Value2
        'Create a new worksheet and give it a name
        Worksheets.Add(After:=Worksheets("original data")).Name = "Retro Enrolls"
        'Copy the entire range to the new worksheet (will only copy visible rows)
        .Copy Worksheets("Retro Enrolls").Range("A1")
'
        .AutoFilter Field:=12, _
                    Criteria1:="ACCT REINST"
        .AutoFilter Field:=14, _
                    Operator:=xlFilterValues, _
                    Criteria1:=Array(0, "11/1/2015")
        Worksheets.Add(After:=Worksheets("original data")).Name = "Retro Reinstates"
        .Copy Worksheets("Retro Reinstates").Range("A1")

        'Switch off the filter
        .AutoFilter
    End With
End Sub