簡體   English   中英

使用VBA無需使用剪貼板即可復制和粘貼多個范圍

[英]Copy and paste multiple ranges without using the clipboard using VBA

我成功使用以下代碼從單個范圍復制了值:

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

上面的復制多個范圍的方法是從以下鏈接中獲得的: 使用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

我究竟做錯了什么?

這樣的事情應該起作用:

'...
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM