我有一个用于Microsoft Project的宏,它循环遍历项目中的每个任务,并执行几项检查以查找任务的任何问题。这些检查包括多个IF
和Select Case
语句。处理具有更多任务的大型项目时,宏可能会变得冗长。我能做些什么来提高宏的速度吗?我已经关闭了屏幕更新和手动计算。
答案 0 :(得分:2)
关闭屏幕更新并将计算模式设置为手动是您可以用来提高性能的唯一应用程序设置;其余的取决于你的算法。
您对问题的描述有点模糊:您的项目有多大以及宏需要多长时间?如果你的项目是1000个任务,并且你正在进行十几次检查而你的代码需要超过五分钟,那么肯定还有改进的余地。但是,如果它是20,000个任务和50个检查,并且宏需要两分钟,请停止尝试改进它 - 这是很好的表现。
结论:如果没有看到您的代码,就无法判断是否有改进的余地。
答案 1 :(得分:0)
如果在代码中的几个不同的比较中使用相同的属性(例如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数据类型非常慢。
答案 2 :(得分:-2)
如果你有一些带有大量数据的变量,比如集合,那就考虑将它设置为空并且函数结束
设置TasksCollection = Nothing