2015-03-02 285 views
0

不确定这是否是代码特定的问题,所以我现在将是通用的。Excel VBA慢速计算循环迭代

我有一个有点复杂的宏,首先读取用户手动输入工作表的金融市场数据,然后继续处理该市场数据,生成所需的市场曲线等,然后计算某些利息估值。

该过程需要大量的循环,因为有成千上万的工具需要进行估价。但是,我注意到,每隔一段时间,宏将循环得非常缓慢 - 每次迭代大约2-3秒。当我有Excel工作簿时,我可以在底部看到它正在说“计算(4个处理器x%完成)”。

要解决此问题,我必须手动强制关闭Excel;通常这会解决问题,下次运行该程序时它可以正常工作。

我正在运行Windows 8(不是8.1)和Excel 2013.我听说这个组合很容易崩溃/错误(我经历过几次自己,Excel需要很长时间来处理基本的请求,如字体格式化或将自发崩溃,没有明显的原因)。

但是,我想问社区,看看问题是否更普遍/已知。

谢谢!

+1

关闭'ScreenUpdating'并设置'Calculation'到'xlCalculationManual'正在运行的迭代之前,然后他们逆转最后。此外,请确保您的代码(如果可能的话)正在处理数组,而不是范围本身。请参阅[我的答案](http://stackoverflow.com/a/20754562/2548721),您可以执行一些步骤来加速代码。 – Manhattan 2015-03-03 03:26:50

回答

1

作为创建一个通用尖端快Excel宏:只要prossible不通过细胞循环,你将一个范围物体上使用with语句获得更好的性能,或者你需要在一个更对数据进行操作精心制作的方式尝试将您的数据范围复制到2维数组中,通过数组循环将比循环通过工作表中的单元格快几个数量级,然后可以将数组转储回范围。

1

在代码的开头尝试application.visible = false。然后确保在最后执行application.visible = true。应该帮助。

0

尝试将光标移到xlBeam 它将改变一切在速度方面在Windows 8.1

Sub CurseurDefault(zz As Boolean) 
    If zz = True Then 
     Application.Cursor = xlDefault 
     'Call ShowCursor(True) 
    Else 
     Application.Cursor = xlIBeam 
     'Call ShowCursor(False) 
    End If 
End Sub