我有一个电子表格,我将以下条件格式应用于,以提高可读性
然而我发现我偶尔会丢失颜色 - Excel会将填充颜色的RGB值更改为与我最初使用的颜色完全不同的颜色
要解决此问题(在分发excel文件之前),我希望在VBA中重新创建上面的条件格式并将其附加到电子表格中的许多组合框
这个想法如下:
等
我有这段代码
Sub ColorCells()
Dim Data As Range
Dim cell As Range
Set currentsheet = ActiveWorkbook.Sheets("Sheet1")
Set Data = currentsheet.Range("C2:C200")
For Each cell In Data
If cell.Value = "1" Then
Range("A" & Data.Row, "H" & Data.Row).Interior.ColorIndex = 10
End If
Next
End Sub
我在第8行挣扎;将颜色/格式应用到我想要的范围,并乐意为任何帮助/有人可以指出我做错了什么
我更喜欢在这里使用条件格式化,所以如果有人能够揭示变色的原因会更快乐。
答案 0 :(得分:2)
对于Range("A" & Data.Row, "H" & Data.Row).Interior.ColorIndex = 10
这里的vba,您使用的是Data.Row
,但您应该参考cell.Row
Range.Row返回第一行的编号。因此,在您的代码中,您每次只更改第一行。
希望这有帮助。
干杯
答案 1 :(得分:1)
颜色变化的一个可能原因是用户可能正在更改主题颜色。分配ThemeColor
的任何颜色都是动态的,并且可以响应更改的主题颜色,例如:
可以通过VBA创建格式条件,指定文字RGB值,这可能最好是当前的方法,因为它仍然可以作为"条件格式化"。
我的方法是使用宏记录器,并记录创建所有格式条件的操作。然后你可以通过这样一种方式修改它来硬编码"颜色值。
这是一个简短的例子;我记录了一个宏,然后稍微修改了输出代码以复制你的第一个格式条件(我不是100%确定我有相同的颜色,但这应该给你结构):
Sub ConditionalFormats()
Dim rng As Range
Dim cFormat As FormatCondition
Set rng = Range("E8:G802")
Set cFormat = rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$C$8=4")
cFormat.SetFirstPriority
cFormat.StopIfTrue = False
With cFormat.Interior
.PatternColorIndex = xlAutomatic
' ### This was the original output using ThemeColor property
' .ThemeColor = xlThemeColorLight2
' ### Modify using Color property instead:
.Color = 15849925
' ### TintAndShade is not needed if we're using the literal color value
'.TintAndShade = 0.799981688894314
End With
'## To add another condition, redefine the rng and add a new condition as needed:
Set rng = Range("I8:O802")
Set cFormat = rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$C$8=4")
With cFormat.Interior
.PatternColorIndex = xlAutomatic
.Color = 15849925
End With
'## Add code for borders, etc.
With cFormat.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlThin
End With
With cFormat.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Color = vbBlack
.Weight = xlThin
End With
End Sub
现在,格式规则并不依赖于主题颜色,因此即使用户更改主题,颜色仍然存在。 (上面的粉红色单元格不有条件地格式化,所以它确实随主题而改变,但蓝色单元格没有改变):