将动态行复制到表中

时间:2018-09-12 17:30:32

标签: excel vba excel-vba

我想找到解决这个问题的方法。

我有一个运行此代码的按钮:

Sub CopyValues()

Dim ws As Worksheet

Set ws = Worksheets("report")

Dim oNewRow As ListRow

Set oNewRow = ThisWorkbook.Worksheets("report").Range("Table1").ListObject.ListRows.Add(AlwaysInsert:=True)

With ThisWorkbook.Sheets(1)

oNewRow.Range.Cells(1, 1).Value = ThisWorkbook.Worksheets(1).Range("A4")
oNewRow.Range.Cells(1, 2).Value = ThisWorkbook.Worksheets(1).Range("B4")
oNewRow.Range.Cells(1, 3).Value = ThisWorkbook.Worksheets(1).Range("D4")
oNewRow.Range.Cells(1, 4).Value = ThisWorkbook.Worksheets(1).Range("C4")
oNewRow.Range.Cells(1, 5).Value = ThisWorkbook.Worksheets(1).Range("G4")
oNewRow.Range.Cells(1, 6).Value = ThisWorkbook.Worksheets(1).Range("F4")
oNewRow.Range.Cells(1, 7).Value = ThisWorkbook.Worksheets(1).Range("E4")

End With

End Sub

当我按下按钮时,它将值从范围的第一行复制到表格中。每次按下按钮时,它会将同一行复制到表中的新行。

我想要的是: 范围(不是表的范围)在工作表中称为“源”。当我按下按钮时,我希望将每一行复制到工作表“报告”中表格的相应行中。

我的猜测是,必须对上面的代码进行修改以包括一个循环,以便向下移动每一行,直到找到空白行为止,但随后范围也必须从A4更改为A5,再到A6 ,依此类推,直到空白。我不知道如何在VBA中执行该代码。

注意:如果您在代码中注意到顺序是ABDCGFE,那是因为我需要将值复制到的表的顺序与源表的顺序不同。我需要那样,这就是为什么我不能做简单的复制粘贴。

注意2:工作表“源”中范围的行最终将是动态的!

非常感谢您

1 个答案:

答案 0 :(得分:0)

类似(未经测试)的东西应该起作用:

Sub CopyValues()

    Dim rwSource As Range, lo As ListObject

    Set rwSource = Worksheets("source").Rows(2) '<< first row to copy from

    Set lo = ThisWorkbook.Worksheets("report").Range("Table1").ListObject

    Do While Application.CountA(rwSource) > 0

        'Assign the values in one shot as an array....
        lo.ListRows.Add(AlwaysInsert:=True).Range.Cells(1).Resize(1, 7).Value = _
               Array(rwSource.Cells(1), rwSource.Cells(2), rwSource.Cells(4), _
                     rwSource.Cells(3), rwSource.Cells(7), rwSource.Cells(6), _ 
                     rwSource.Cells(5))

        Set rwSource = rwSource.Offset(1, 0) '<< next source row
    Loop

End Sub