选择范围的全局错误 - Excel VBA



我有一个包含 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 正在查看当前活动的工作表。

当您不需要时,您还可以使用ActivateSelect- 只需告诉它要从哪个工作表复制以及要粘贴到哪个工作表即可。

您可以将代码重写为:

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)

最新更新