2012-01-03 119 views
0

在Excel中创建伪甘特图项目计划。对于没有MS Project的员工,我遇到了以下问题。 Excel表格变得非常缓慢。我不确定它是由我使用的VBA函数还是条件格式引起的。VBA使Excel缓慢?或条件格式?

该表以任务细节开始 任务,持续时间,taskStart,任务结束

并继续包含字段weekStart和weekEnd的日历部分。 在每个日历单元是表现公式

=PseudoGantt(task;duration;taskStart;taskEnd;weekStart;weekEnd) 

宏如下所示:

Function PseudoGantt(taskName As String, taskLength As Integer, taskStart As Date, taskEnd As Date, weekStart As Date, weekEnd As Date) As String 
    PseudoGantt = Switch(_ 
     taskName = "", "empty", _ 
     taskStart = taskEnd And taskStart >= weekStart And taskEnd <= weekEnd, "milestone", _ 
     taskLength = 0 And taskStart >= weekStart And taskStart < weekEnd, "summarytask", _ 
     taskLength = 0 And taskEnd <= weekEnd And taskEnd > weekStart, "summarytask", _ 
     taskLength = 0 And taskStart < weekStart And taskEnd > weekEnd, "summarytask", _ 
     taskStart >= weekStart And taskStart < weekEnd, "start", _ 
     taskEnd <= weekEnd And taskEnd > weekStart, "end", _ 
     taskStart < weekStart And taskEnd > weekEnd, "continue", _ 
     True, "empty" _ 
    ) 
End Function 

这将填补细胞用甘特状态的一周中,我作为条件使用的条件格式化以适当地给单元着色。

这样的工作,但正如我所说,它使Excel非常缓慢。

我想过替换VBA自定义函数中的条件格式,但它们只返回值并且不能更改单元格颜色等。

问:

  1. 是它的自定义函数或条件格式是什么让Excel的慢?
  2. 如何为VBA中的单元格着色?
  3. 我应该宁愿将日历单元格留空,让VBA在没有解决方法的情况下将着色和内容写入单元格?
  4. 如果你的答案是“是”。怎么做?

感谢收听。

旁注:对不起,不能发布的截图,但(防垃圾邮件过滤器)

+0

你已经停止ScreenUpdating了吗? Application.ScreenUpdating = False,并且如果在每次更新设置后都不需要重新计算EnableCalculation = False – rene 2012-01-03 12:27:48

+1

请尝试和[删除所有自定义格式化](http://www.vbaexpress.com/kb/getarticle.php ?kb_id = 548)而不改变你的代码的其余部分,看看它是否更好。如果是这样,请考虑使用vba更改单元格的格式而不是CF. – JMax 2012-01-03 13:00:03

+0

条件格式是非常有效的,因此罪魁祸首可能是你的UDF - 你有多少次使用它? (JMax的建议非常合乎逻辑) – brettdj 2012-01-08 04:03:01

回答

0

我曾经创造了一个动态甘特与动态图表,你拿的开始日期和计算时间,然后制作一张动态图表。这里有the instructions