我希望在多个工作表中复制数据。工作表的名称在列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
答案 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;方法