我有一个用于Microsoft的宏,它循环遍历项目中的每个任务,并执行几次检查以查找任务中的任何问题。这些检查包括几个IF和Select Case语句。当处理具有更多任务的大型项目时,宏可能会变得很长。我能做些什么来提高宏的速度吗?我已经关闭了屏幕更新和手动计算。
发布于 2015-05-07 20:56:40
关闭屏幕更新和将计算模式设置为手动是唯一可以用来提高性能的应用程序设置;其余的取决于您的算法。
你对这个问题的描述有点模糊:你的项目有多大,这个宏需要多长时间?如果您的项目是1,000个任务,并且您正在进行12次检查,而您的代码需要超过5分钟,那么是的,肯定还有改进的余地。但是如果是20,000项任务和50次检查,而宏需要2分钟,那么就不要再试图改进它了--这是很棒的性能。
底线:如果不看到代码,就不可能知道是否有改进的余地。
发布于 2015-05-08 21:34:36
如果在代码中的几个不同比较中使用相同的属性(例如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上面所指出的那样),它确实取决于正在处理的数据量。
此外,请确保使用适当的类型定义变量,因为依赖默认的变量数据类型非常慢。
发布于 2015-05-06 20:35:15
如果拥有大量数据(如集合)的变量,请考虑将其设置为nothing和函数的末尾。
设置TasksCollection=Nothing
https://stackoverflow.com/questions/30086338
复制相似问题