我想找到解决这个问题的方法。
我有一个运行此代码的按钮:
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:工作表“源”中范围的行最终将是动态的!
非常感谢您
答案 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