VBA条件格式

我正在努力想出一个优雅的方式来通过VBA来应用条件格式化规则。 我更喜欢VBA,因为a)这些规则将应用于多个工作表,以及b)在工作表之间复制/粘贴时防止CF复制问题。

我有一个清单项目清单,全部保存在不同的位置。 我想根据位置进行格式化,格式如下:

字体颜色(将改变每个位置); 上边框(与字体颜色相同); 底部边框(与字体颜色相同)

此外,范围需要是dynamic的,对于每个工作表,它适用于该表中的表格。 我想要将相同的代码应用于每个适用的工作表,而不是需要对每个工作表的表名进行硬编码。

任何帮助将不胜感激。


–UPDATE–我尝试在这里调整J_V的代码,但在Public Sub的r.FormatConditions.Add Type:=xlExpression, Formula1:=formula收到“运行时错误”5:“无效的过程调用或参数”。 我不确定边界上的最后一位是否正确,因为运行时间会停止macros。 我还需要在dynamic表格引用中工作,但是我一次只能处理一个问题。

 Sub ConditionalFormatting() Dim myRange As Range Set myRange = ThisWorkbook.Sheets("Widget1").Range("Widget1_table[Location]") myRange.FormatConditions.Delete Call FormatRange(myRange, 10, "=$E5="Warehouse1") Call FormatRange(myRange, 11, "=$E5="Warehouse2") Call FormatRange(myRange, 13, "=$E5="Warehouse3") End Sub Public Sub FormatRange(r As Range, color As Integer, formula As String) r.FormatConditions.Add Type:=xlExpression, Formula1:=formula r.FormatConditions(r.FormatConditions.Count).Font.colorindex = color With r.FormatConditions(1).Borders(xlTop) .LineStyle = xlContinuous .Color = color .TintAndShade = 0 .Weight = xlThin End With With r.FormatConditions(1).Borders(xlBottom) .LineStyle = xlContinuous .Color = color .TintAndShade = 0 .Weight = xlThin End With r.FormatConditions(1).StopIfTrue = False End Sub 

该问题实际上不在Sub FormatRange而是在Sub ConditionalFormatting调用公式时分配公式的方式。 公式包含一个string,所以引号必须像这样加倍。

 Sub ConditionalFormatting() Dim myRange As Range Set myRange = ThisWorkbook.Sheets("Widget1").Range("Widget1_table[Location]") myRange.FormatConditions.Delete Call FormatRange(myRange, 10, "=$E5=""Warehouse1""") Call FormatRange(myRange, 11, "=$E5=""Warehouse2""") Call FormatRange(myRange, 13, "=$E5=""Warehouse3""") End Sub 

至于第二个macros,当你添加一个新的条件时,它会进入队列的底部。 如果您查看创buildCF规则的logging输出,您将看到它通常包含该行,

  Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 

这将CF规则置于队列的顶部,以便之后可以将其称为.FormatConditions(1) 。 如果你不想要它在队列的顶部,那么你必须把它作为这样的队列中的最后一个

 Public Sub FormatRange(r As Range, clr As Integer, frml As String) r.FormatConditions.Add Type:=xlExpression, Formula1:=frml r.FormatConditions(r.FormatConditions.Count).Font.ColorIndex = clr With r.FormatConditions(r.FormatConditions.Count).Borders(xlTop) .LineStyle = xlContinuous .ColorIndex = clr .TintAndShade = 0 .Weight = xlThin End With With r.FormatConditions(r.FormatConditions.Count).Borders(xlBottom) .LineStyle = xlContinuous .ColorIndex = clr .TintAndShade = 0 .Weight = xlThin End With r.FormatConditions(r.FormatConditions.Count).StopIfTrue = False End Sub 

我也改变了你的边界.ColorIndex作为10,1113的 .ColorIndex分配似乎是*绿色,蓝色和紫色的 ColorIndex标识符。 元音已从variables名称中删除,以避免与collections属性的名称发生冲突。