Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 复制单元格范围并粘贴到第一个空行更有效的代码?擅长_Excel_Vba - Fatal编程技术网

Excel 复制单元格范围并粘贴到第一个空行更有效的代码?擅长

Excel 复制单元格范围并粘贴到第一个空行更有效的代码?擅长,excel,vba,Excel,Vba,我有一个宏,它从“新搜索”中选择一个单元格,并将范围粘贴到“过去搜索”中的第一个打开的单元格。我认为我的代码非常无效。有人对我如何改进这一点有什么想法吗 Sub Macro5() Range("A3:J3").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("Past Searches").Select Range("A1").End(xlDown).Offset(1, 0).Select A

我有一个宏,它从“新搜索”中选择一个单元格,并将范围粘贴到“过去搜索”中的第一个打开的单元格。我认为我的代码非常无效。有人对我如何改进这一点有什么想法吗

Sub Macro5()
Range("A3:J3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Past Searches").Select
Range("A1").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Worksheets("New Searches").Activate
Application.CutCopyMode = False
End Sub

首先,您不必在要操作的单元格/工作表上使用.Select或.Activate,只需直接引用它们即可。这确实会降低代码的速度

.Copy方法可以接受目标参数,因此您不必使用.Paste

另外,.End属性也不是很可靠。最好改用UsedRange

你只需要一行就可以做到

Worksheets("New Search").Range("A3:J3").Copy Destination:=Worksheets("Past Searches").UsedRange.Columns(1).Offset(1, 0)

首先,您不必在要操作的单元格/工作表上使用.Select或.Activate,只需直接引用它们即可。这确实会降低代码的速度

.Copy方法可以接受目标参数,因此您不必使用.Paste

另外,.End属性也不是很可靠。最好改用UsedRange

你只需要一行就可以做到

Worksheets("New Search").Range("A3:J3").Copy Destination:=Worksheets("Past Searches").UsedRange.Columns(1).Offset(1, 0)

法比奥:谢谢你给我指明了正确的方向,我不可能把这些乱七八糟的东西变成简洁的代码

numofrows = ActiveSheet.UsedRange.Rows.Count`

Worksheets("New Searches").Range("A3", "J" + CStr(numofrows)).Copy Destination:=Worksheets("Past Searches").Range("A1").End(xlDown).Offset(1, 0)

这最终完成了我需要做的事情。

法比奥谢谢你给我指明了正确的方向,我不可能把这些乱七八糟的东西变成简洁的代码

numofrows = ActiveSheet.UsedRange.Rows.Count`

Worksheets("New Searches").Range("A3", "J" + CStr(numofrows)).Copy Destination:=Worksheets("Past Searches").Range("A1").End(xlDown).Offset(1, 0)

这就完成了我需要做的事情。

你也可以这样做,这样你就不需要NumoFrow了

Worksheets("New Searches").Range(Range("A3:J3"), Range("A3:J3").End(xlDown)).Copy Destination:= _
Worksheets("Past Searches").Range("A1").End(xlDown)

你也可以这样做,这样你就不需要NumoFlows了

Worksheets("New Searches").Range(Range("A3:J3"), Range("A3:J3").End(xlDown)).Copy Destination:= _
Worksheets("Past Searches").Range("A1").End(xlDown)

如果去掉
,代码会更干净、更高效。选择
。激活
。阅读此答案末尾的注释,了解如何操作:要添加@HeadofCatering所说的内容,请查看答案,其中有避免
选择
@seanscheir的方法,复制粘贴宏。。。答案还链接到Sid回答的问题。(好主意!)Chris Nielsen的答案(公认的答案)也有很多有用的信息。如果你去掉
,你的代码会更干净、更高效。选择
。激活
。阅读此答案末尾的注释,了解如何操作:要添加@HeadofCatering所说的内容,请查看答案,其中有避免
选择
@seanscheir的方法,复制粘贴宏。。。答案还链接到Sid回答的问题。(好主意!)Chris Nielsen的答案(公认的答案)也有很多有用的信息。感谢您的提示,但您的代码似乎只选择了
A3:J3
,而不是第一行下面的行?感谢您的提示,但是您的代码似乎只选择了
A3:J3
,而不是第一行下面的行?没问题,很高兴我能帮上忙:)没问题,很高兴我能帮上忙:)