Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 环路速度改进_Excel_Vba_Performance_Loops_Processing Efficiency - Fatal编程技术网

Excel 环路速度改进

Excel 环路速度改进,excel,vba,performance,loops,processing-efficiency,Excel,Vba,Performance,Loops,Processing Efficiency,我正在寻求帮助,以提高这个宏的速度。它是一个大得多的宏的一部分,但是在单独测试了它的每个部分之后,这个部分占用了98%的时间。总计此宏大约需要25-30分钟。工作簿中只有12张工作表。每一页大约有200行和50列,这与这段代码没有多大关系。我不确定是否有更好的方法来做到这一点,或者你是否有任何见解,为什么它需要这么长时间 我在英特尔I5-6300U CPU上运行Excel 2016 64位,CPU频率为2.4Ghz,最高可达3Ghz。在运行这个marco的时候,我在没有其他程序运行的情况下达到了

我正在寻求帮助,以提高这个宏的速度。它是一个大得多的宏的一部分,但是在单独测试了它的每个部分之后,这个部分占用了98%的时间。总计此宏大约需要25-30分钟。工作簿中只有12张工作表。每一页大约有200行和50列,这与这段代码没有多大关系。我不确定是否有更好的方法来做到这一点,或者你是否有任何见解,为什么它需要这么长时间

我在英特尔I5-6300U CPU上运行Excel 2016 64位,CPU频率为2.4Ghz,最高可达3Ghz。在运行这个marco的时候,我在没有其他程序运行的情况下达到了2.85Ghz左右。8GB内存

Sub step3()

Dim sht As Worksheet

Application.ScreenUpdating = False

For Each sht In ActiveWorkbook.Worksheets

    If sht.Name <> "Directions" Then
        'Update months in colA
        sht.Range("A5").Formula = "=EOMONTH(TODAY(),-1)"
        sht.Range("A6").Formula = "=EOMONTH(TODAY(),-2)"
        sht.Range("A7").Formula = "=EOMONTH(TODAY(),-3)"
        sht.Range("A5:A7").Copy
        sht.Range("A5:A7").PasteSpecial xlPasteValues
    End If

Next sht

Application.ScreenUpdating = True
End Sub

关闭计算和事件,代码之外的内容会导致问题

Sub step3()
    On Error GoTo safeout
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    Dim sht As Worksheet
    For Each sht In ActiveWorkbook.Worksheets

        If sht.Name <> "Directions" Then
            With sht.Range("A5:A7")
                .Formula = "=EOMONTH(TODAY(),-ROW(1:1))"
                .Value = .Value
            End With
        End If

    Next sht
safeout:
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
    Application.EnableEvents = True
End Sub

谢谢你,斯科特,这很有效。这个excel有大量的链接,这些链接一定是试图自动更新的。处理时间是现在