我的代码出现了一个奇怪的错误,如果我在运行宏之前没有激活表单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
答案 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