【发布时间】:2012-02-01 11:40:29
【问题描述】:
在 Excel 中创建一个伪甘特图项目计划。对于那些没有 MS Project 的员工,我遇到了以下问题。 Excel 工作表变得非常缓慢。不知道是我使用的VBA函数还是条件格式造成的。
表格以任务详细信息开头 任务、持续时间、taskStart、taskEnd。
并继续日历部分,包括字段 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 自定义函数中的条件格式,但它们只返回值,不能更改单元格颜色等。
问题:
- 是自定义函数还是条件格式导致 Excel 变慢?
- 如何为 VBA 中的单元格着色?
- 我是否应该将日历单元格留空并让 VBA 进行着色,而无需将内容写入单元格?
- 如果您对 3. 的回答是“是”。该怎么做?
感谢收听。
旁注:抱歉,还不能发布截图(反垃圾邮件过滤器)
【问题讨论】:
-
您已经停止 ScreenUpdating 了吗? Application.ScreenUpdating = False 并且如果您不必在每次更新后依赖重新计算设置 EnableCalculation = False
-
试一试delete all your custom formating,不要更改其余代码,看看它是否工作得更好。如果是这样,请考虑使用 vba 而不是 CF 来更改单元格格式。
-
条件格式非常有效,因此罪魁祸首很可能是您的 UDF - 您使用了多少次? (JMax 的建议很合乎逻辑)