我基本上需要清理自己编写的代码,以免我反复复制和粘贴!请指教?
Sub cp()
Worksheets("copy").Select
Range("b2").Select
Selection.copy
Range("b7").Select
ActiveSheet.Paste
Range("c2").Select
Selection.copy
Range("e7").Select
ActiveSheet.Paste
Range("d2").Select
Selection.copy
Range("h7").Select
ActiveSheet.Paste
Range("e2").Select
Selection.copy
Range("k7").Select
ActiveSheet.Paste
end sub
答案 0 :(得分:1)
Sub cp
Dim ws as Worksheet
Set ws = Worksheets("copy")
ws.Range("B7") = ws.Range("B2")
ws.Range("E7") = ws.Range("C2")
ws.Range("H7") = ws.Range("D2")
ws.Range("K7") = ws.Range("E2")
End Sub
...
尽可能避免选择,复制和粘贴。尝试直接引用您想要的单元格,范围,工作表和工作簿。因此,这里的改进可能是指定工作簿
Dim wb as workbook
Set wb = workbooks("MyWorkbook")
dim ws as worksheet
Set ws = wb.Sheets("copy")
...
这样excel永远不会混淆你所指的是哪些细胞。在打开工作簿或创建新工作簿时,它特别方便。
Dim wb as workbook
Set wb = workbooks.add 'Creates a new workbook, and binds it to the variable wb, so you always know any action on wb is being done to that new workbook
希望有所帮助
编辑 - 回复您的评论 -
不使用Range,而是使用Cell,它使用行号和列号而不是列号 -
Dim x as Integer
Dim ws as Worksheet
Set ws = Worksheets("copy")
For x = 2 to 500
ws.Cells(7,x) = ws.Cells(2,x)
Next x
尝试在For循环上设置断点,然后使用F8逐步执行。我不完全理解你要去的模式(将B向下移动5行,将C中的值移到E等等),但是如果你可以调整它以满足你的需要,那听起来就像你一样有足够的钱来完成你的项目