Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Macos excel的简单vba宏执行缓慢(mac 2011)_Macos_Excel_Vba - Fatal编程技术网

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

Macos excel的简单vba宏执行缓慢(mac 2011),macos,excel,vba,Macos,Excel,Vba,以下宏在MS Excel for Mac(Office 2011)中运行速度非常慢。对于For next循环中的100个数据点,需要10秒。在Office 2004的早期版本中,行“Application.EnableEvents=False”修复了该问题,但在Office 2011中已不再存在。代码如下所示。任何提示都将不胜感激 Sub findfirstnonzero3() Application.Volatile Application.EnableEvents = Fal

以下宏在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

有一种避免计算延迟的好方法。我用它取得了非常好的效果,现在我一直在使用它

简单地说,Excel在“VBA世界”和“电子表格世界”之间来回复制数据需要很长时间

如果您一次完成所有的“读取”,处理,然后一次完成所有的“写入”,您将获得惊人的性能。这是使用变体数组来完成的,如下所述:

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


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

有一种避免计算延迟的好方法。我用它取得了非常好的效果,现在我一直在使用它

简单地说,Excel在“VBA世界”和“电子表格世界”之间来回复制数据需要很长时间

如果您一次完成所有的“读取”,处理,然后一次完成所有的“写入”,您将获得惊人的性能。这是使用变体数组来完成的,如下所述:

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


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

有一种避免计算延迟的好方法。我用它取得了非常好的效果,现在我一直在使用它

简单地说,Excel在“VBA世界”和“电子表格世界”之间来回复制数据需要很长时间

如果您一次完成所有的“读取”,处理,然后一次完成所有的“写入”,您将获得惊人的性能。这是使用变体数组来完成的,如下所述:

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


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

有一种避免计算延迟的好方法。我用它取得了非常好的效果,现在我一直在使用它

简单地说,Excel在“VBA世界”和“电子表格世界”之间来回复制数据需要很长时间

如果您一次完成所有的“读取”,处理,然后一次完成所有的“写入”,您将获得惊人的性能。这是使用变体数组来完成的,如下所述:

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


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

总结这里的评论,这是对我有效的答案:

  • 使用关闭宏开始时的自动计算
  • Application.Calculation=xlManual

    Application.Calculation=xlCalculationManual


  • 在宏结束时,使用“自动计算”重新启用“自动计算”
  • Application.Calculation=xlAutomatic

    Application.Calculation=xlCalculationAutomatic

    谢谢大家。
    D

    总结一下这里的评论,这是对我有效的答案:

  • 使用关闭宏开始时的自动计算
  • Application.Calculation=xlManual

    Application.Calculation=xlCalculationManual


  • 在宏结束时,使用“自动计算”重新启用“自动计算”
  • Application.Calculation=xlAutomatic

    Application.Calculation=xlCalculationAutomatic

    谢谢大家。
    D

    总结一下这里的评论,这是对我有效的答案:

  • 使用关闭宏开始时的自动计算
  • Application.Calculation=xlManual

    Application.Calculation=xlCalculationManual


  • 在宏结束时,使用“自动计算”重新启用“自动计算”
  • Application.Calculation=xlAutomatic

    Application.Calculation=xlCalculationAutomatic

    谢谢大家。
    D

    总结一下这里的评论,这是对我有效的答案:

  • 使用关闭宏开始时的自动计算
  • Application.Calculation=xlManual

    Application.Calculation=xlCalculationManual


  • 在宏结束时,使用“自动计算”重新启用“自动计算”
  • Application.Calculation=xlAutomatic

    Application.Calculation=xlCalculationAutomatic

    谢谢大家。

    D

    应用程序。Volatile
    在子例程中没有任何用途。2011年的VBA速度不是特别快,但将计算转换为手动可能很有用。谢谢。在Prefs中禁用自动计算大大加快了执行速度(约100倍)。不过这是一个不方便的解决方案。我想保留auto-calc。@Rory你应该发布一个答案,这显然是一个很好的建议!Dan,您可以在宏中禁用自动计算,然后在宏结束时重新启用它。谢谢所有的好建议@pgr,你能告诉我在子系统中本地禁用自动计算的命令吗?这会让我很开心。这对谷歌来说很容易<代码>应用程序计算