对于过滤数据的每个循环返回 0 个结果,没有错误

For Each loop on filtered data returning 0 results, no errors

我需要在用户选择的日期之间从数据库中生成 sheet 个值。日期在数据库的第 2 列中,但我需要此范围内每个日期的整行。我得到了一些建议,使用 For Each 来更轻松地使用 SpecialCells(xlCellTypeVisible)。虽然我不再收到任何错误,但我的产品工作中也没有任何数据sheet。谁能告诉我为什么我不返回数据?

Sub Generate()

Dim g As Integer
Dim h As Integer
Dim datemin As String
Dim datemax As String

datemin = CDbl(CDate(Sheets("start").Cells(15, 8)))
datemax = CDbl(CDate(Sheets("start").Cells(15, 9)))


Worksheets("Database").Range("A1").AutoFilter Field:=10, Criteria1:=">=" & datemin, _
        Operator:=xlAnd, Criteria2:="<=" & datemax


g = 0

For Each Row In Worksheets("database").Range("A1")
    g = g + 1
    If Cells(g, 1).SpecialCells(xlCellTypeVisible) = True And Cells(g, 1) <> "" Then

Sheets("product").Activate
Dim NextRow As Long
NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 10

'fill KPI
Cells(NextRow, 1) = Format(Sheets("database").Cells(g, 1), "mm/dd/yyyy")  'Date1
Cells(NextRow, 2) = Format(Sheets("database").Cells(g, 2), "mm/dd/yyyy")  'Date2
Cells(NextRow, 3) = Sheets("database").Cells(g, 3)  'value1
Cells(NextRow, 4) = Sheets("database").Cells(g, 4)  'value2
Cells(NextRow, 6) = Sheets("database").Cells(g, 5)  'value3
Cells(NextRow, 9) = Sheets("database").Cells(g, 8)  'comment
Cells(NextRow, 13) = Sheets("database").Cells(g, 6)  'person
    Else
        Exit For
    End If

Next

End Sub

您只 'looping' 通过了一个单元格 - A1。

如果您想为此使用循环,请尝试遍历数据库中的所有行并检查它们是否可见。

如果它们可见则将相关数据复制到另一个sheet。

Sub Generate()
Dim rngDst As Range
Dim rngSrc As Range
Dim datemin As String
Dim datemax As String
Dim g As Integer
Dim h As Integer

    datemin = CDbl(CDate(Sheets("start").Cells(15, 8)))
    datemax = CDbl(CDate(Sheets("start").Cells(15, 9)))


    Worksheets("Database").Range("A1").AutoFilter Field:=10, Criteria1:=">=" & datemin, _
                                                      Operator:=xlAnd, Criteria2:="<=" & datemax

    Set rngSrc = Worksheets("Database").Range("A2")
    Set rngDst = Worksheets("Product").Range("A11")
    
    Do
    
        
        If Not rngSrc.EntireRow.Hidden And rngSrc.Value <> "" Then

            'fill KPI
            rngDst.Value = Format(rngSrc.Value, "mm/dd/yyyy")  'Date1
            rngDst.Offset(, 1).Value = Format(rngSrc.Offset(, 1).Value, "mm/dd/yyyy") 'Date2
            rngDst.Offset(, 2).Value = rngSrc.Offset(, 2).Value 'value1
            rngDst.Offset(, 3).Value = rngSrc.Offset(, 3).Value 'value2
            rngDst.Offset(, 5).Value = rngSrc.Offset(, 4).Value 'value3
            rngDst.Offset(, 8).Value = rngSrc.Offset(, 7).Value 'comment
            rngDst.Offset(, 12).Value = rngSrc.Offset(, 5).Value 'person
            Set rngDst = rngDst.Offset(1, 0)
        End If
        
        Set rngSrc = rngSrc.Offset(1, 0)
    Loop Until rngSrc = ""

End Sub