【问题标题】:Conditional Formatting in VBA, based on functionsVBA中的条件格式,基于函数
【发布时间】:2011-11-29 19:37:57
【问题描述】:

我有一些(半)复杂的条件格式要在 Excel 中进行。我可以使用菜单让它正常工作,但我想以编程方式进行,因为我希望它应用于多张工作表(复制、粘贴为格式不起作用)。

我在设置 CF 以获取代码时尝试记录宏,但它没有记录该类型的条目。

以下是我正在应用的规则,目前范围为:=$1:$65536

=OR(COLUMN()=1,COLUMN()=2,ISBLANK($B1))
=AND(LEFT($A1,6)="Base (",A1>100)
=AND(LEFT($A1,6)="Base (",A1>=75,A1<=100)
=AND(LEFT($A1,6)="Base (",A1>=50,A1<75)
=AND(LEFT($A1,6)="Base (",A1<50)
=$B1-9.999  (current cell is less than this value)

就像我说的那样,我可以通过将一整列从一张纸复制到另一张纸来手动复制它,但我无法将它复制到所有纸片上,我想找到一种方法将其作为宏所以它可以很容易地应用于新的工作簿(通常有 10-15 张)。

【问题讨论】:

    标签: excel vba conditional-formatting


    【解决方案1】:
    Sub DoCFRules()
    
        Dim rng As Range
        Set rng = ThisWorkbook.Sheets("Sheet1").Cells
    
        rng.Parent.Activate
        rng.Cells(1).Select 'Important!
    
        ApplyCF rng, "=OR(COLUMN()=1,COLUMN()=2,ISBLANK($B1))", RGB(0, 255, 0)
        ApplyCF rng, "=AND(LEFT(A1,6)=""Base ("",A1>100)", RGB(255, 0, 0)
        'etc...
    
    End Sub
    
    Sub ApplyCF(rng As Range, sFormula As String, clr As Long)
        With rng.FormatConditions.Add(Type:=xlExpression, Formula1:=sFormula)
            .Interior.Color = clr
        End With
    End Sub
    

    【讨论】:

    • +1 此外,如果您可能在同一张工作表上多次运行此宏,您可以考虑首先删除所有现有的条件格式。
    • 非常感谢,这太棒了。非常感谢!
    • 对不起,希望你能明白。另一个问题,它如何适用于最后一条规则,我将当前单元格与固定列中的值进行比较?我需要做一些特别的事情来告诉它如果真就停止吗?
    • @JFC- 如果另一个单元格处于活动状态,则公式不会按预期出现:试试看 - 非常令人困惑!
    • @McB - 您可以向 ApplyCF 方法添加另一个(可选?)参数,该参数可以采用布尔值指示“如果为真则停止”,然后在颜色线下方添加一行以设置该值。
    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 2020-01-24
    • 2012-11-10
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多