【问题标题】:VBA makes Excel slow? Or conditional formatting?VBA 让 Excel 变慢?还是条件格式?
【发布时间】: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 自定义函数中的条件格式,但它们只返回值,不能更改单元格颜色等。

问题:

  1. 是自定义函数还是条件格式导致 Excel 变慢?
  2. 如何为 VBA 中的单元格着色?
  3. 我是否应该将日历单元格留空并让 VBA 进行着色,而无需将内容写入单元格?
  4. 如果您对 3. 的回答是“是”。该怎么做?

感谢收听。

旁注:抱歉,还不能发布截图(反垃圾邮件过滤器)

【问题讨论】:

  • 您已经停止 ScreenUpdating 了吗? Application.ScreenUpdating = False 并且如果您不必在每次更新后依赖重新计算设置 EnableCalculation = False
  • 试一试delete all your custom formating,不要更改其余代码,看看它是否工作得更好。如果是这样,请考虑使用 vba 而不是 CF 来更改单元格格式。
  • 条件格式非常有效,因此罪魁祸首很可能是您的 UDF - 您使用了多少次? (JMax 的建议很合乎逻辑)

标签: excel vba


【解决方案1】:

我曾经用动态图表创建了一个动态甘特图,您获取开始日期并计算持续时间,然后制作动态图表。这里是the instructions

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 2015-10-22
    • 1970-01-01
    • 2016-10-02
    • 2017-10-05
    • 2017-11-03
    • 2015-08-17
    • 2017-03-03
    • 2012-01-14
    相关资源
    最近更新 更多