我有一个包含 2 张工作表的 excel 工作簿,Sheet1 和 Sheet2。 我在 Sheet1 上有一张桌子,里面有 10 个人。我正在尝试将一个宏放在一起,该宏将复制并粘贴特定范围 A2:I2 中的信息,然后将其复制到 Sheet2 上的下一个空行
这是我到目前为止的代码,(它还没有完成,因为我正在尝试一次构建一个步骤,以便我可以提高对代码的理解(
Dim NR As Long
NR = Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Application.ScreenUpdating = False
Worksheets("Sheet1").Activate
Range("A2:I2").Select
Selection.Copy
Worksheets("Sheet2").Activate
Range("B:I" & NR).Select
我不断收到此错误消息
运行时错误"1004" 对象_Global的方法"范围"失败。
它似乎与最后一个范围选择有关。我不够了解,不知道为什么它没有选择所需的范围。
有什么想法吗?
谢谢。
正如@Vityata所说 - 您没有正确引用范围,正如@Harassed所说 - 您的 NR 正在查看当前活动的工作表。
当您不需要时,您还可以使用Activate
和Select
- 只需告诉它要从哪个工作表复制以及要粘贴到哪个工作表即可。
您可以将代码重写为:
Sub Test()
Dim NR As Long
NR = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Sheet1").Range("A2:I2").Copy _
Destination:=Worksheets("Sheet2").Range("B" & NR)
End Sub
只是快速而肮脏的修复:
将最后一个更改为:Range("B1:I" & NR).Select
长版本:
应通过以下方式之一定义范围:Range("B1:I10")
或Range("B:I")
.
在您的代码中,您使用的是中间方式Range("B:I10")
,这还不够。
对于您的代码,最好在NR = Range("A"...
之后编写一个条件,如下所示:
If (NR < 1) Then NR = 1
因此,它会为B
行提供一些值,并且不会出错。
NR 正在获取碰巧处于活动状态的任何工作表中的第一个空白行。您想要工作表 2 中的第一个空白行。除了指定目标的开头外,您无需执行任何操作 - 副本将填充所需的范围。 也不要选择单元格或激活工作表,这是毫无意义的,不必要的和缓慢的。
Dim NR As Long
NR = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
Worksheets("Sheet1").Range("A2:I2").copy _
destination:= Worksheets("Sheet2").Range("B" & NR)