首页 > 解决方案 > 将动态行复制到表中

问题描述

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

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

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:工作表“源”中范围的行最终将是动态的!

非常感谢

标签: vbaexcel

解决方案


像这样(未经测试)的东西应该可以工作:

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

推荐阅读