VBA Copy&只粘贴根据活动工作表

时间:2017-04-07 09:57:11

标签: excel vba excel-vba

我的代码出现了一个奇怪的错误,如果我在运行宏之前没有激活表单SOH,那么它只会复制单元格B1和... B2进入我的其他工作簿模板构建。

我已经在下面附上了我的工作。

Public Sub Info_Copy()
   Dim Lastrow As Integer
   Dim SOH As Excel.Workbook
   Set SOH = Workbooks("StockOH")
   Dim Template As Excel.Workbook
   Set Template = Workbooks("Template Build")

Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row


SOH.Sheets("NSF").Activate
Range("B2:B" & Lastrow).Copy
Template.Sheets("Sheet1").Activate
    Range("B2").Select
    ActiveSheet.Paste

2 个答案:

答案 0 :(得分:2)

我猜你是这样的:

Public Sub Info_Copy()
    Dim SOH As Excel.Workbook
    Set SOH = Workbooks("StockOH")
    Dim Template As Excel.Workbook
    Set Template = Workbooks("Template Build")

    With SOH.Sheets("NSF") '<--| reference wanted sheet in wanted workbook
        .Range("B2:B" & .Cells(.Rows.Count, 1).End(xlUp).Row).Copy Destination:=Template.Sheets("Sheet1").Range("B2") '<--| copy its column "B" cells from row 2 down to column A last not empty row and paste it to 'Template' workbook "Sheet1" worksheet from cell B2"
    End With
End Sub

在不同的工作簿之间工作时,您最重要的是将范围引用限定为workbook对象,因为:

  • 不同的Excel版本工作簿可能有不同的工作表行号,因此.Rows.Count必须引用正确的工作簿

  • 不同的工作簿可以包含同名的工作表

答案 1 :(得分:1)

您正在计算活动工作表上的行数,因为您使用了ActiveSheet对象。

如果您不希望每次需要使用活动工作表完全使用哪个工作表。例如:

Lastrow = Workbooks("SomeWorkbook").Worksheets("SomeSheet").Cells(Rows.Count, 1).End(xlUp).Row

这很难说,但我猜你需要这样的东西

Lastrow = SOH.Worksheets("SOH").Cells(Rows.Count, 1).End(xlUp).Row