全局错误选择范围 - Excel VBA

时间:2017-07-13 11:42:24

标签: excel-vba vba excel

我有一张excel工作簿,有2张,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失败的方法“范围”。

它似乎与最后的范围选择有关。我不明白为什么它没有选择所需的范围。

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:0)

快速而肮脏的修复

将最后一个更改为: powershell -NoProfile -Command "$ps = 'abc_'; Get-ChildItem -File -Filter ${ps}*.txt | ForEach-Object { Move-Item $_.FullName $($_.Name -replace $ps,'') }"

长版本

范围应通过以下方式之一定义: Range("B1:I" & NR).SelectRange("B1:I10")

在您的代码中,您使用的是中间路Range("B:I"),这还不够。

对于你的代码,最好在Range("B:I10")之后写一个像这样的条件:

NR = Range("A"...因此,它会为If (NR < 1) Then NR = 1行提供一些价值,而且不会出错。

答案 1 :(得分:0)

NR正在获得任何活动表格中的第一个空白行。你想要sheet2中的第一个空白行。除了指定目的地的起点之外,您不需要做任何事情 - 副本将填写所需的范围。 也不要选择单元格或激活工作表,它没有意义,不必要和缓慢。

 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)

答案 2 :(得分:0)

正如@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