我有一个Macro,它从“New Search”中选择一个单元格并将范围粘贴到“过去搜索”中的第一个打开的单元格我认为我的代码非常无效。有没有人对如何改进这个有任何想法?
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
答案 0 :(得分:3)
首先,您不必在要操作的单元格/工作表上使用.Select或.Activate,只需直接引用它们即可。这确实会减慢您的代码速度。
.Copy方法可以使用Destination参数,因此您不必在其他地方使用.Paste。
此外,.End属性不是很可靠。最好使用UsedRange。
你只能在一行中做到这一点。
Worksheets("New Search").Range("A3:J3").Copy Destination:=Worksheets("Past Searches").UsedRange.Columns(1).Offset(1, 0)
答案 1 :(得分:0)
Fabio感谢你指出了我正确的方向,我不可能把这个烂摊子变成简洁的代码。
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)
这最终做了我需要做的事。
答案 2 :(得分:0)
你也可以这样做,所以你不需要numofrows?
Worksheets("New Searches").Range(Range("A3:J3"), Range("A3:J3").End(xlDown)).Copy Destination:= _
Worksheets("Past Searches").Range("A1").End(xlDown)