excel的简单vba宏执行缓慢(mac 2011)

时间:2015-02-13 14:42:46

标签: macos excel-vba vba excel

以下宏在MS Excel for Mac(Office 2011)中运行速度非常慢。对于for-next循环中的100个数据点,需要10秒。在Office 2004的早期版本中,行" Application.EnableEvents = False"修复了问题但在Office 2011中不再修复。代码如下所示。任何提示都表示赞赏。

Sub findfirstnonzero3()
    Application.Volatile
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Dim student, studenter, first, tentor, utdata, yr, startcol, startrow, temp As Integer
    Dim resultatet As Integer
    Dim ignore, resstr As String
    Dim tenta, outp, temprange As Range

    yr = Cells(4, 2).Value
    studenter = Cells(1, 2).Value
    tentor = Cells(2, 2).Value
    utdata = 3
    startrow = 2
    startcol = 5

    Cells(1, utdata).Offset(startrow - 2, 0).Value = "Första tenta"
    For student = 1 To studenter
        temp = 0
        Cells(1, utdata).Offset(startrow + student - 2, 0).Value = 0
        For first = 1 To tentor
            resstr = Cells(startrow + student - 1, startcol).Offset(0, first - 1).Value
            resultatet = Val(resstr)
            temp = first
            If resultatet > 0 Then
                Cells(1, utdata).Offset(startrow + student - 2, 0).Value = temp
                Exit For
            End If
        Next
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

2 个答案:

答案 0 :(得分:1)

有一种避免计算延迟的好方法。我用这个得到了很棒的结果,现在我一直在使用它。

简而言之,Excel需要很长时间才能在" VBA世界"之间来回复制数据。和电子表格世界"。

如果你做了所有"读取"立刻,处理,然后做所有"写"马上,你获得惊人的表现。这是使用变体数组完成的,如下所示:

http://msdn.microsoft.com/en-us/library/ff726673.aspx#xlFasterVBA

标记为:在单个操作中读取和写入大块数据

我能够重构一些我用了5分钟运行的代码并将其降低到1.5分钟。重构本身只花了我10分钟,这是惊人的,因为它是相当复杂的代码。

答案 1 :(得分:0)

总结这里发表的评论,这是对我有用的答案:


  1. 使用
  2. 关闭宏开始时的自动计算

    Application.Calculation = xlManual

    Application.Calculation = xlCalculationManual


    1. 在宏的末尾,使用
    2. 重新启用自动计算

      Application.Calculation = xlAutomatic

      Application.Calculation = xlCalculationAutomatic

      谢谢大家。

      d