For Each 过滤数据循环返回 0 结果,没有错误

问题描述

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

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

解决方法

您只是“循环”了一个单元格 - A1。

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

如果它们可见,则将相关数据复制到另一个工作表中。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...