1

我想创建一段 VBA 代码,它将从 ListObject 中选择前 10 行,然后将它们粘贴到另一个 ListObject 中。将一组行复制到新工作表后,将对其进行处理,然后选择并处理接下来的 10 行,依此类推。

我可以使用标准 VBA 函数来实现这一点,但我想使用 ListObject 来实现这一点,即

Sub PopulateSectionOfData()

    Dim loInput As ListObject
    Dim loOutput As ListObject
    Dim intNumOfColumns As Integer
    Dim rngToCopy As Range
    Dim intRowsInFile As Integer

    ' Create the inout and output ListObjects
    Set loInput = Worksheets(WS_INPUT).ListObjects(LO_INPUT)
    Set loOutput = Worksheets(WS_OUTPUT).ListObjects(LO_OUTPUT)

    ' Delete all the current rows from the output table
    Worksheets(WS_OUTPUT).ListObjects(LO_OUTPUT).DataBodyRange.Delete

    ' Set variables
    intNumOfColumns = loInput.ListColumns.Count
    WorkbookCounter = 1
    intRowsInFile = 10                   ' Select 10 records at a time

    ' Get 10 records at a time from the input file
    For i = 1 To loInput.DataBodyRange.Rows.Count Step intRowsInFile - 1

        '???? - This is the area that i am unsure on
        Set rngToCopy = loInput.DataBodyRange(p, 1)
        rngToCopy.Copy loOutput

        '????

        ' TODO - Add further processing here
    Next i

    ' Clear used objects
    Set loInput = Nothing
    Set loOutput = Nothing

End Sub

非常感谢您对此事的任何帮助,因为我想使用 ListObjects

先感谢您

4

2 回答 2

3

DataBodyRange指表中行列的实际范围。如果表格中没有行(这是您执行后的条件DataBodyRange.Delete,您需要先在表格中添加一行;然后,您可以将数据复制并粘贴到该行中,Excel会相应地扩展表格

您的for循环可以更新为如下所示:

For i = 1 To loInput.DataBodyRange.Rows.Count Step intRowsInFile - 1

    ' First add a blank row to the table
    loOutput.ListRows.Add

    ' Check that 10 rows are available in the input table
    ' (Done to avoid adding blank rows to the output table)
    If i + 9 > loInput.DataBodyRange.Rows.Count Then
        loInput.DataBodyRange.Rows(i & ":" & loInput.DataBodyRange.Rows.Count) _
            .Copy loOutput.DataBodyRange.Rows(i)
    Else
        loInput.DataBodyRange.Rows(i & ":" & i + 9).Copy loOutput
    End If
Next i
于 2013-11-20T14:06:25.783 回答
0

请记住,“DataBodyRange”返回一个范围。所以这样做:

'copies entire line 1 from "loInput" to "loOutput" on line 2
loOutput.DataBodyRange.Rows(2) = loInput.DataBodyRange.Rows(1)

另外,只需做一个 FOR 来处理其余的

于 2019-01-18T19:06:48.693 回答