我想复制列 D:I,K,O,AG,AH,AA 但它当前复制 D:AH
I want to copy column D:I,K,O,AG,AH,AA but it currently copies D:AH
Sub AutofillData()
Dim wkbkSource As Workbook
Dim strPath As String
Dim myRange As Range
Dim i As Integer
Dim c As Range
Dim wkbkTarget As Workbook
Application.ScreenUpdating = False
strPath = "\temp\"
Set wkbkA = ThisWorkbook
Set wkbkB = Workbooks.Open(strPath & Range("E8").Value)
Set myRange = wkbkA.Sheets("Stand-up Request").Range("B13:B25")
offs = 0
For Each c In myRange
i = c.Value
wkbkB.Worksheets("Main Data").Range("D" & i & ":AH" & i).Copy
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
Application.CutCopyMode = False
offs = offs + 1
On Error Resume Next
Next
wkbkB.Close savechanges:=False
Application.ScreenUpdating = True
End Sub
如果您不介意列顺序,您应该只更改一行:
wkbkB.Worksheets("Main Data").Range("D" & i & ":I" & i & ",K" & i & ",O" & i & ",AG" & i & ",AH" & i & ",AA" & i).Copy
请注意,这样 AA 会粘贴在 AG 之前。如果您介意列顺序,您应该拆分您的范围并将它们 copy/paste 分开:
wkbkB.Worksheets("Main Data").Range("D" & i & ":I" & i & ",K" & i & ",O" & i & ",AG" & i & ",AH" & i).Copy
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
wkbkB.Worksheets("Main Data").Range("AA" & i).Copy
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 10).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
请注意,这是一个静态代码,如果您更改要复制的列,您还应该相应地设置第二次粘贴的偏移量的列值。如果你想要一个动态代码,你应该创建另一个你将复制的范围对象,你可以获得该范围的尺寸。
此外,最好完全避免使用 copy/paste,使用如下代码:
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 0).Resize(1, 6).Value = wkbkB.Worksheets("Main Data").Range("D" & i & ":I" & i).Value
但是每个子范围都需要做,所以比较复杂。
另请注意,在没有 On Error Resume Next
的情况下,您的代码在 ActiveSheet 上对我来说工作正常,因此您最好再次检查您的代码:)
Sub AutofillData()
Dim wkbkSource As Workbook
Dim strPath As String
Dim myRange As Range
Dim i As Integer
Dim c As Range
Dim wkbkTarget As Workbook
Application.ScreenUpdating = False
strPath = "\temp\"
Set wkbkA = ThisWorkbook
Set wkbkB = Workbooks.Open(strPath & Range("E8").Value)
Set myRange = wkbkA.Sheets("Stand-up Request").Range("B13:B25")
offs = 0
For Each c In myRange
i = c.Value
wkbkB.Worksheets("Main Data").Range("D" & i & ":AH" & i).Copy
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
Application.CutCopyMode = False
offs = offs + 1
On Error Resume Next
Next
wkbkB.Close savechanges:=False
Application.ScreenUpdating = True
End Sub
如果您不介意列顺序,您应该只更改一行:
wkbkB.Worksheets("Main Data").Range("D" & i & ":I" & i & ",K" & i & ",O" & i & ",AG" & i & ",AH" & i & ",AA" & i).Copy
请注意,这样 AA 会粘贴在 AG 之前。如果您介意列顺序,您应该拆分您的范围并将它们 copy/paste 分开:
wkbkB.Worksheets("Main Data").Range("D" & i & ":I" & i & ",K" & i & ",O" & i & ",AG" & i & ",AH" & i).Copy
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
wkbkB.Worksheets("Main Data").Range("AA" & i).Copy
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 10).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
请注意,这是一个静态代码,如果您更改要复制的列,您还应该相应地设置第二次粘贴的偏移量的列值。如果你想要一个动态代码,你应该创建另一个你将复制的范围对象,你可以获得该范围的尺寸。
此外,最好完全避免使用 copy/paste,使用如下代码:
wkbkA.Sheets("Stand-up Request").Range("C13").Offset(offs, 0).Resize(1, 6).Value = wkbkB.Worksheets("Main Data").Range("D" & i & ":I" & i).Value
但是每个子范围都需要做,所以比较复杂。
另请注意,在没有 On Error Resume Next
的情况下,您的代码在 ActiveSheet 上对我来说工作正常,因此您最好再次检查您的代码:)