Macos excel的简单vba宏执行缓慢(mac 2011)
以下宏在MS Excel for Mac(Office 2011)中运行速度非常慢。对于For next循环中的100个数据点,需要10秒。在Office 2004的早期版本中,行“Application.EnableEvents=False”修复了该问题,但在Office 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
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分钟,这是令人惊讶的,因为它是相当复杂的代码。总结这里的评论,这是对我有效的答案:
D总结一下这里的评论,这是对我有效的答案:
D总结一下这里的评论,这是对我有效的答案:
D总结一下这里的评论,这是对我有效的答案:
D
应用程序。Volatile
在子例程中没有任何用途。2011年的VBA速度不是特别快,但将计算转换为手动可能很有用。谢谢。在Prefs中禁用自动计算大大加快了执行速度(约100倍)。不过这是一个不方便的解决方案。我想保留auto-calc。@Rory你应该发布一个答案,这显然是一个很好的建议!Dan,您可以在宏中禁用自动计算,然后在宏结束时重新启用它。谢谢所有的好建议@pgr,你能告诉我在子系统中本地禁用自动计算的命令吗?这会让我很开心。这对谷歌来说很容易<代码>应用程序计算