0

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

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
4

3 回答 3

3

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

.Copy 方法可以采用 Destination 参数,因此您不必在其他地方使用 .Paste。

此外, .End 属性也不是很可靠。最好使用 UsedRange 代替。

你几乎可以在 1 行中做到这一点。

Worksheets("New Search").Range("A3:J3").Copy Destination:=Worksheets("Past Searches").UsedRange.Columns(1).Offset(1, 0)
于 2013-07-31T14:09:23.923 回答
0

你也可以这样做,这样你就不需要 numofrows 了吗?

Worksheets("New Searches").Range(Range("A3:J3"), Range("A3:J3").End(xlDown)).Copy Destination:= _
Worksheets("Past Searches").Range("A1").End(xlDown)
于 2013-07-31T15:12:02.720 回答
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)

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

于 2013-07-31T15:07:40.280 回答