我有一张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失败的方法“范围”。
它似乎与最后的范围选择有关。我不明白为什么它没有选择所需的范围。
有什么想法吗?
感谢。
答案 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).Select
或Range("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正在查看当前活动的工作表。
当您不需要时,您还会使用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