基于单元格颜色的条件格式

时间:2017-12-05 22:43:42

标签: excel conditional-formatting

考虑一个包含3列的列表。

  • 第1列包含日期列表。
  • 第2栏保留固定值,特殊日子,如国定假日(复活节)和特殊日子,如Mothersday。
  • 第3列包含用户定义的事件。

第2列是通过VBA代码填充的,国家法定假日用相同的代码涂成蓝色,但特殊日子如Mothersday则没有。用户无法操纵此列。

第3列由工作表本身的用户填充。如果用户在第三列中添加事件,则该行将通过条件格式设置为绿色。

问题是,如果某个事件与国定假日一致,则会覆盖蓝色。

我的目标是添加第二个条件格式规则来检查:

  1. 添加了用户定义的事件
  2. 该行的颜色为蓝色
  3. 如果满足这两个条件,将设置图案颜色,图案样式和背景颜色,以便我得到两种颜色的组合。

    如果仅满足第一个条件,则仅设置背景颜色。

    简而言之:我需要一种方法来检查单元格颜色并将其合并到条件格式规则中。

3 个答案:

答案 0 :(得分:1)

我认为您需要创建一个新的VBA函数,以确定单元格是否为特定颜色。例如,以下代码可用于确定范围中的单元格是否为蓝色:

If range.Interior.Color = RGB(0, 0, 256) Then
    colorAction = "Something"

然后,从单元格的宏中调用VBA函数。

=CheckIfBlue(B5)

Allen Wyatt有good article on conditionally taking an action depending on a cell's color

答案 1 :(得分:0)

您必须添加3条规则

R1 :和(用户定义的事件;不是(假日))>绿色。

R2 :和(不是(用户定义的事件);假日)>蓝色。

R3 :和(用户定义的事件;假日)>混色。

在条件格式对话框中检查R1,R2最右边的复选框。

答案 2 :(得分:0)

我这样做的方法就是放弃所有条件格式并添加Worksheet_Change()事件。其中相应地检查条件和格式。

请注意,这是一个非常艰巨的方法,但它完成了工作。如果条件格式的构建包含一种将格式化作为可能条件的方法,那将会容易得多。

作为旁注,因为工作表是按代码添加的,所以它们本身不包含此代码,但它位于名为ClassModule的{​​{1}}中。

clsEvents

中的声明
ClassModule

声明在Public WithEvents chngSht As Worksheet 中,其中sub是添加工作表的

Module

添加工作表或打开工作簿时,此子名称为

Dim arrShts() as New clsEvents

执行条件格式化的实际代码。

Sub shtEvents()
    Dim sht As Worksheet

    Erase arrShts
    ReDim arrShts(0)

    For Each sht In ThisWorkbook.Worksheets
        If Not sht.Name = "Menu" And Not sht.Name = "Tabellen" Then
            If UBound(arrShts) = 0 Then
                ReDim arrShts(1 To 1)
            Else
                ReDim Preserve arrShts(1 To UBound(arrShts) + 1)
            End If
            Set arrShts(UBound(arrShts)).chngSht = sht
        End If
    Next

End Sub