循环表中的循环行

时间:2015-06-14 16:22:28

标签: excel-vba autofilter vba excel

有没有人有一种很好的方法来循环过滤表中的行?

我倾向于需要使用过滤表中的一些数据来填充另一个文档,在这种情况下是一个帐户报表工作表。由于行是不连续的,我之前使用行号填充数据的方法似乎失败了。

SOAwb是一个单独的工作簿,用于填充TSOA表中的数据,大部分代码实际上都可以工作,但仍然包含过滤/隐藏范围的数据。

j是SOAwb上的第一个空行,所以在for循环结束时,当j = j + 1时,下一个空行重复填充过程

For k = 1 To TSOA.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count

SOAwb.Worksheets(1).Cells(j, 4) = TSOA.DataBodyRange(k, 6) 'debit amount

SOAwb.Worksheets(1).Cells(j, 5) = TSOA.DataBodyRange(k, 7) 'credit amt

SOAwb.Worksheets(1).Cells(j, 1) = TSOA.DataBodyRange(k, 3) 'Date

SOAwb.Worksheets(1).Cells(j, 2) = Right(TSOA.DataBodyRange(k, 3), 2) & "-" & TSOA.DataBodyRange(k, 2) 'Reference Number

Select Case TSOA.DataBodyRange(k, 1)

Case "INV"

    SOAwb.Worksheets(1).Cells(j, 3) = "Invoice"

Case "CR"

    SOAwb.Worksheets(1).Cells(j, 3) = "Credit"

Case Else

    MsgBox "Invalid Type"

End Select

j = j + 1

Next

如果k仍然是桌子上的相对行#位置,那将是完美的。有没有人对如何执行此操作有任何建议,或者使用过滤范围将数据(逐行)填充到另一个工作簿的替代方法?

2 个答案:

答案 0 :(得分:1)

使用您已直接指定的范围集合,而不是其计数

java.sql.Date

答案 1 :(得分:-1)

隐藏的行有高度= 0

您必须遍历所有已使用的行并仅处理可见的行

For k = 1 To TSOA.DataBodyRange.Rows.Count

If SOAwb.Worksheets(1).Cells(j, 4).Height > 0 Then...

与此类似:

For k = 1 To TSOA.DataBodyRange.Rows.Count

    With SOAwb.Worksheets(1)

        If TSOA.DataBodyRange(k, 6).Height > 0 Then

            .Cells(j, 4) = TSOA.DataBodyRange(k, 6) 'debit amount
            .Cells(j, 5) = TSOA.DataBodyRange(k, 7) 'credit amt
            .Cells(j, 1) = TSOA.DataBodyRange(k, 3) 'Date
            .Cells(j, 2) = Right(TSOA.DataBodyRange(k, 3), 2) & "-" & _
                                TSOA.DataBodyRange(k, 2) 'Reference Number
            Select Case TSOA.DataBodyRange(k, 1)
                Case "INV": .Cells(j, 3) = "Invoice"
                Case "CR":  .Cells(j, 3) = "Credit"
                Case Else:  MsgBox "Invalid Type"
            End Select
        End If
    End With
    j = j + 1
Next