我使用以下代码成功地从单个范围复制值:
Dim wb As Workbook, strFile As String, rSrc As Range, rDst As Range, r1 As Range, r2 As Range, r3 As Range, r As Range
Set wb = ActiveWorkbook
'pasting Summary values
Set wkbTemp = Workbooks.Open(ThisWorkbook.Path & "\data\Summary.csv")
LastRow = Cells(Rows.Count, "B").End(xlUp).Row
Set rSrc = wkbTemp.Sheets(1).Range("b2:G" & LastRow)
wb.Activate
Set rDst = wb.Sheets("Summary").Cells(6, 4).Resize(rSrc.Rows.Count, rSrc.Columns.Count)
rDst = rSrc.Value
我也试图从同一张纸上复制多个范围,但是当我使用以下代码设置源的范围时它会崩溃:
'PY to Comparison
With wkbTemp.Sheets(1)
Set r1 = .Range("B2:B" & LastRow)
Set r2 = .Range("d2:d" & LastRow)
Set r3 = .Range("f2:g" & LastRow)
Set r = Union(r1, r2, r3)
Set rSrc = .Range(r)
End With
wb.Activate
Set rDst = wb.Sheets("Comparison").Cells(9, 6).Resize(rSrc.Rows.Count, rSrc.Columns.Count)
rDst = rSrc.Value
复制多个范围的上述方法来自以下链接Copy multiple ranges with VBA
我还尝试使用预定义的行长度复制范围(但我真正需要的是动态长度),但我的代码只复制第一个范围:
Set rSrc = wkbTemp.Sheets(1).Range("B2:B6,d2:d6,f2,g6")
wb.Activate
Set rDst = wb.Sheets("Comparison").Cells(9, 6).Resize(rSrc.Rows.Count, rSrc.Columns.Count)
rDst = rSrc.Value
我做错了什么?
答案 0 :(得分:1)
这样的事情应该有效:
'...
With wkbTemp.Sheets(1)
Set r1 = .Range("B2:B" & LastRow)
Set r2 = .Range("d2:d" & LastRow)
Set r3 = .Range("f2:g" & LastRow)
Set r = Union(r1, r2, r3)
End With
CopyRangeValue r, wb.Sheets("Comparison").Cells(9, 6)
'....
CopyRangeValue
Sub看起来像这样:
'copy a range (can be multi-area) value to a different range
Sub CopyRangeValue(rngCopy As Range, rngDest As Range)
Dim a As Range
For Each a In rngCopy.Areas
rngDest.Resize(a.Rows.Count, a.Columns.Count).Value = a.Value
Set rngDest = rngDest.Offset(0, a.Columns.Count)
Next a
End Sub