如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。