如何加速我的 Microsoft Project VBA 代码?

How can I speed up my Microsoft Project VBA code?

我有一个用于 Microsoft Project 的宏,它循环遍历项目中的每个任务,并执行多项检查以发现任务的任何问题。这些检查包括几个 IFSelect Case 语句。在处理具有更多任务的大型项目时,宏可能会变得冗长。我能做些什么来提高宏的速度吗?我已经关闭了屏幕更新和手动计算。

如果您有一些包含大量数据的变量,例如集合,请考虑将其设置为空并结束您的函数

设置 TasksCollection=Nothing

关闭屏幕更新并将计算模式设置为手动是您可以用来提高性能的唯一应用程序设置;剩下的取决于你的算法。

你对问题的描述有点模糊:你的项目有多大,宏需要多长时间?如果您的项目有 1,000 个任务并且您要进行十几个检查并且您的代码需要超过五分钟,那么是的,肯定有改进的余地。但是,如果它有 20,000 个任务和 50 个检查并且宏需要两分钟,请停止尝试改进它——那是很好的性能。

底线:不看代码就无法判断是否有改进的余地。

如果您在代码中的多个不同比较中使用相同的 属性(例如 objTask.Start),则将 属性 设置到局部变量一次,然后对局部变量。

例如:

慢码:

If objTask.start < TestDate1 and objTask.Start > TestDate2 then ...

快码:

Define dteStart as Date 

dteStart = objTask.Start

if dteStart < TestDate1 and dteStart > testdate2 then ...

COM 对象模型的调用非常昂贵。第二个代码示例会快很多(尽管如上文 Rachel 所述),它确实取决于正在处理的数据量。

此外,请确保使用适当的类型定义变量,因为依赖默认的 Variant 数据类型非常慢。