考虑一个包含3列的列表。
第2列是通过VBA代码填充的,国家法定假日用相同的代码涂成蓝色,但特殊日子如Mothersday则没有。用户无法操纵此列。
第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)
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