0

我有下面显示的代码。我第一次过滤,效果很好。然而第二次,它没有。过滤的列包含年份。

For i = 1 To LastRow
    If wSheet.Range("A1").Offset(i, 0) <> wSheet.Range("A1").Offset(i + 1, 0) Then
        WellName = wSheet.Range("A1").Offset(i, 0)
        Set rng = wSheet.Range("A1", Cells(LastRow, LastColumn))
        rng.AutoFilter Field:=1, Criteria1:=Name
        L_top = wSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Row
        L_bot = wSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Count
        LastRowFilter = wSheet.Range("A1").End(xlDown).Row
        LastColumnFilter = wSheet.UsedRange.Columns.Count

        For j = 1 To LastRowFilter
            If Year(wSheet.Range("B1").Offset(j, 0)) <> Year(wSheet.Range("B1").Offset(j + 1, 0)) Then
                ReportYear = Year(wSheet.Range("B1").Offset(j, 0))
                Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter))
                rng2.AutoFilter Field:=2, Criteria2:=ReportYear
                L_top = wSheet.Range("B2:B" & LastRowFilter).SpecialCells(xlCellTypeVisible).Row
                L_bot = wSheet.Range("B2:B" & LastRowFilter).SpecialCells(xlCellTypeVisible).Count

            End If
        Next

    End If
 Next
4

1 回答 1

1

看来您的问题是您的第二个过滤器(似乎初始过滤器应该导致错误,但如果它没有损坏,请不要修复它:))。问题在于以下几行:

ReportYear = Year(wSheet.Range("B1").Offset(j, 0))
Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter))
rng2.AutoFilter Field:=2, Criteria2:=ReportYear

您设置ReportYear等于要过滤的年份(有意义),但随后您尝试过滤等于该年份的值。这在逻辑上似乎是有道理的,但请记住该列包含日期,而不是年份。对您的代码一无所知(因此对任何其他错误表示歉意),这似乎适用于我的简单测试:

ReportYear = Year(wSheet.Range("B1").Offset(j, 0))
Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter))
rng2.AutoFilter Field:=2, Criteria1:= ">=" & DateSerial(ReportYear, 1, 1), _
               Operator:=xlAnd, Criteria2:="<=" & DateSerial(ReportYear, 12, 31)

这会使用您的ReportYear值,但会将过滤器转换为“显示 1 月 1 日至 12 月 31 日之间的所有日期”的形式ReportYear。我同意这似乎有点不雅(我敢肯定这里的一位大师有一个更短的解决方案),但它可能适用于您的情况。

于 2012-10-18T03:45:40.107 回答