为什么运行相同的VBA代码需要不同的时间?

时间:2016-05-19 05:07:20

标签: excel vba excel-vba

我以两种不同的方式在Excel中运行相同的VBA代码。 1.原始方式:单击调用sub的命令按钮。 2.使用Application.Run从另一个工作簿中的宏调用sub。

我放了一个计时器来测量只运行sub中代码所需的时间。对于第一种方式,所花费的时间是319.36秒,而对于第二种方式,所花费的时间仅为2.89秒。

如何解释?

以下是代码。通常,它所做的是更改stsheet中的值,该值是调用sub时的活动工作表,然后在不同工作表之间复制并粘贴一些值。

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

1 个答案:

答案 0 :(得分:0)

如果需要多长时间,请在宏运行时尝试制作计算手册。请记住在最后恢复自动(如果需要),就像这样。

library(dplyr)
read.csv("test.csv", colClasses="character") %>% mutate_each(funs(as.numeric))