【问题标题】:How to do conditional formatting of colour scale in VBA in a more efficient way?如何以更有效的方式在 VBA 中对色标进行条件格式化?
【发布时间】:2020-04-06 01:38:10
【问题描述】:

由于我想在如下所示的范围内对色标进行条件格式设置,因此我在执行此操作时记录了宏。代码可以工作,但是当我对 36 个数据透视表执行相同操作时,我遇到了“过程是大错误”(编译错误)。那么有没有办法减少过程的大小,以便我可以为 60 个可枢转对象做到这一点?

我用于色标的条件格式类型

Sub test()

    Range("B5:J12").Select
    Selection.FormatConditions.AddColorScale ColorScaleType:=3
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
        xlConditionValueLowestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 7039480
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
        xlConditionValuePercentile
    Selection.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 8711167
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(3).Type = _
        xlConditionValueHighestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 8109667
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ScopeType = xlSelectionScope
End Sub

错误信息

【问题讨论】:

  • 请解释“程序很大”错误。存在编译错误和运行时错误。运行时错误通常有一个编号和正确的描述。他们会在一个消息框中得到通知,您可以在其中单击一个Debug 按钮,该按钮将引导至导致它的代码行。所有这些都是与您的问题相关的重要信息。
  • @Variatus 程序大是指编译错误。通过单击调试,它不会将我带到错误行。
  • @Variatus 很可能是因为这里的代码行很长,有可能减少代码以提高效率?
  • 你能发一张错误信息的图片吗?我相当确信代码与错误无关,当然不是它的行长,并且怀疑您可能会达到可以应用的格式限制。我倾向于使用代码根据自己的评估应用格式。我认为 CF 很复杂,最终很麻烦,正如您的问题所证实的那样。
  • 您需要将格式化代码提取到一个单独的子代码中,然后从主代码中调用它——无需一遍又一遍地重复几乎相同的行。

标签: excel vba colors pivot-table


【解决方案1】:

您需要将格式化代码提取到单独的子代码中,然后从主代码中调用它 - 无需一遍又一遍地重复几乎相同的行。

例如:

Sub Main()
    ApplyFC Worksheets("Sheet1").Range("B5:J12")
    ApplyFC Worksheets("Sheet2").Range("B5:J12")
    'etc etc
End Sub

Sub ApplyFC(rng As Range)

    With rng.FormatConditions.AddColorScale(ColorScaleType:=3)
        .SetFirstPriority
        .ColorScaleCriteria(1).Type = xlConditionValueLowestValue
        With .ColorScaleCriteria(1).FormatColor
            .Color = 7039480
            .TintAndShade = 0
        End With
        .ColorScaleCriteria(2).Type = xlConditionValuePercentile
        .ColorScaleCriteria(2).Value = 50
        With .ColorScaleCriteria(2).FormatColor
            .Color = 8711167
            .TintAndShade = 0
        End With
        .ColorScaleCriteria(3).Type = xlConditionValueHighestValue
        With .ColorScaleCriteria(3).FormatColor
            .Color = 8109667
            .TintAndShade = 0
        End With
        .ScopeType = xlSelectionScope
    End With

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-06
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多