将具有不同行长度的列复制到另一个工作簿

时间:2017-09-20 09:27:08

标签: vba excel-vba excel

我需要将A2中的列复制到未知行长度到新工作簿。 另一个工作簿有其他标题,我需要没有标题的列A到列C,另一个标题和列J需要到列A,依此类推。

我试过这段代码

Sub SO()

Dim lastRow As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = Workbooks("Workbook1.xlsm").Worksheets("Orderheader")
Set ws2 = Workbooks("Workbook2.xlsm").Worksheets("Sheet1")

lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row

ws1.Range(Cells(2, 1), Cells(lastRow, 1)).Copy

ws2.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False

End Sub

它运作良好一次,现在它不起作用。它似乎也不适用于多列,我真的需要它。

现在我收到错误"方法'范围'对象' _Worksheet'失败"

我做错了什么?

1 个答案:

答案 0 :(得分:0)

在您发布的代码中,您应该使用工作表名称限定所有单元格,以防它在您运行宏时处于非活动状态。您需要进一步解释其余的请求,因为它不清楚(" J列需要进入A栏,依此类推")。

Sub SO()

Dim lastRow As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = Workbooks("Workbook1.xlsm").Worksheets("Orderheader")
Set ws2 = Workbooks("Workbook2.xlsm").Worksheets("Sheet1")

With ws1
    lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range(.Cells(2, 1), .Cells(lastRow, 1)).Copy
    ws2.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With

End Sub