VBA - 跨工作表复制数据

时间:2016-02-17 02:52:46

标签: vba

我希望在多个工作表中复制数据。工作表的名称在列L中,我想从列N:R中获取该特定行的数据,然后将其复制到相应表单中的单元格D17:D21中。

任何帮助都会很棒。

干杯 DRod

Sub Macro2()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim wsGet As Worksheet
    Dim LCell As Range
    Dim sDataCol As String
    Dim lHeaderRow As Long

    sDataCol = "L"  'Change to be the column you want to match sheet names agains
    lHeaderRow = 5  'Change to be what your actual header row is

    Set wb = ActiveWorkbook
    Set ws = wb.Sheets("Sheet1")    'Change this to be your Summary sheet

    'Check for values in sDataCol
    With ws.Range(sDataCol & lHeaderRow + 1, ws.Cells(ws.Rows.Count, sDataCol).End(xlUp))
        If .Row <= lHeaderRow Then Exit Sub 'No data

        'Loop through sDataCol values
        For Each LCell In .Cells
        If LCell.Text <> "" Then
            'Check if sheet named that value exists
            If Evaluate("ISREF('" & LCell.Text & "'!A1)") Then
                'Found a matching sheet, copy data from columns N:R to cells D17:D21 in the corresponding sheet
                Set wsGet = wb.Sheets(LCell.Text)
                wsGet.Range("N[ ]:R[ ]").Copy
                LCell.Activate
                Range("D17:D21").PasteSpecial Paste:=xlPasteValues, Transpose:=True
            End If
        End If
        Next LCell
    End With

End Sub

1 个答案:

答案 0 :(得分:1)

有一些错误

  • wsGet.Range("N[ ]:R[ ]")不是有效的语法。

    wsGet.Range("N:R")是。

    然而,这样你就得到了整个列,而不仅仅是你需要的行。

    你可以使用&#34; Instersect()&#34;方法或&#34;调整大小()&#34;在该范围内获得所需范围的方法

  • wsGet.Range("N[ ]:R[ ]").Copy您正在使用&#34;。复制&#34;关于&#34; wsGet&#34;的方法表格范围。

    在&#34; ws&#34;的相同范围内使用它(根据前面的建议进行修正)。而不是

  • LCell.Activate,您正在激活&#34;单元&#34;而不是&#34;表&#34;。

    您应该使用wb.Sheets(LCell.Text).Activate代替

    但是您不需要任何工作表激活,因为您已经设置了&#34; wsGet&#34;作为&#34;目的地&#34;表,所以只需使用&#34; .PasteSpecial&#34;方法