【发布时间】:2016-05-19 18:27:45
【问题描述】:
我在 Excel 中以两种不同的方式运行相同的 VBA 代码。 1. 原方式:点击调用sub的命令按钮。 2. 使用 Application.Run 从不同工作簿中的宏调用 sub。
我放了一个计时器来测量只运行 sub 中的代码需要多长时间。第一种方式耗时 319.36 秒,而第二种方式耗时仅为 2.89 秒。
如何解释?
下面是代码。一般来说,它所做的是在调用 sub 时更改 stsheet 中的一个值,该值是活动表,然后在不同的表之间复制和粘贴一些值。
Sub CopyPaste()
time1 = Timer
Application.ScreenUpdating = False
stsheet = ActiveSheet.Name
Sheets("A1").Select
Range("F6:AA25").ClearContents
Sheets("A2").Select
Range("F6:S25").ClearContents
For I = 1 To 20
Sheets(stsheet).Select
Range("A20").Value = I
Sheets("B").Select
Range("u26:v30").Select
Selection.Copy
Range("d26").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets(stsheet).Select
If Range("m34").Value = 0 Then
Exit For
End If
For J = 1 To 22
Sheets(stsheet).Select
Range("A22").Value = J
Range("y47").Value = Range("E101")
Range("Y47").Select
Selection.Copy
Sheets("M1").Select
Range("F6").Offset((I - 1), J - 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next J
For K = 1 To 14
Sheets(stsheet).Select
Range("t52").Value = K
Range("y48").Value = Range("E201")
Range("y48").Select
Selection.Copy
Sheets("M2").Select
Range("F6").Offset((I - 1), K - 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next K
Next I
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox Timer - time1
End Sub
【问题讨论】:
-
代码运行时与哪个工作簿处于活动状态有关?代码有什么作用?在您的帖子中包含实际代码会更有用。
-
快一百多倍!这既令人惊讶又令人担忧,代码在这两种情况下都成功运行了吗?并且正在做同样的事情吗?
-
这两种情况下 Excel 工作表是否可见?
-
@TimWilliams ,我已经包含了按钮和宏调用的 sub。
-
@GaryEvans :这令人担忧,但两次运行的结果似乎相同。