下午好,
我有这个宏,可以将工作表中的值复制到另一个工作表上的不同页面。例如:
Sheet1.A1到Sheet2.K2,Sheet1.A2到Sheet2.AA2,Sheet1.A3到Sheet2.AQ2
我是通过以下方式做到的:
Sheets("Inlog").Range("A1").Activate
For i = 4 To k + 1
ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Activate
ActiveCell.Value = Sheets("CBT").Range("J" & i).Value
Next
代码本身运行良好,但这不是唯一的循环,因为我希望将多个范围从Sheet1复制到Sheet2。
我的完整宏可以解决问题,但需要大约4分钟才能完成。对于使用较新版本Excel的同事来说,时间更长。
我的VBA技能非常基础,所以任何专业提示或其他方法来加快速度?
谢谢!
答案 0 :(得分:1)
除IIJHFII建议外,您应该避免使用ActiveCell
并使用Range
- 对象。
您可以通过执行Range
并使用
Dim rng as Range
保存在变量中
Set rng = rng.Offset(rowOffset:=0, columnOffset:=10)
它们的工作方式与ActiveCell
完全相同(因为它也是Range
- 对象),因此您也可以设置.Value
属性。
答案 1 :(得分:0)
尝试关闭屏幕更新:
application.screenupdating = False
Sheets("Inlog").Range("A1").Activate
For i = 4 To k + 1
ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Activate
ActiveCell.Value = Sheets("CBT").Range("J" & i).Value
Next
application.screenupdating = True
应该在这类事情上节省一点时间
答案 2 :(得分:0)
Dim off As Long
off = 1
For i = 4 To k + 1
Sheets("Inlog").Cells(1, off * 10).Value = Sheets("CBT").Cells(i, 10).Value
off = off + 1
Next
这应该做同样的事情,它应该稍微快一些。 此外,您可以通过将其作为代码的开头来禁用自动计算和屏幕更新:
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
最后这个:
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
答案 3 :(得分:0)
目前我正在复制一个值,然后将下一个值复制到相同的位置,但是在下一页到右边。我重新编写了代码,以便不会向右移动页面,而是向下翻页:
For i = 4 To k
Sheets("Inlog").Range("K" & (2 + 16 * (i - 3))) = Sheets("CBT").Range("K" & i)
Next
事实证明这种方式更快。
屏幕更新也有帮助,谢谢!