【发布时间】:2015-02-28 07:59:59
【问题描述】:
我正在努力寻找一种通过 VBA 应用条件格式规则的优雅方法。我更喜欢 VBA,因为 a) 规则将适用于多个工作表,b) 它可以防止在工作表之间复制/粘贴时出现 CF 重复问题。
我有一份库存物品清单,所有物品都保存在不同的位置。我想使用以下格式根据位置进行格式化:
字体颜色(每个位置都会改变);上边框(与字体颜色相同);底部边框(与字体颜色相同)
此外,范围需要是动态的,因为对于每个工作表,它适用于该工作表上的表格。我想对每个适用的工作表应用相同的代码,而不是对每个工作表的表名进行硬编码。
任何帮助将不胜感激。
--更新--
我尝试修改 J_V 的代码 here,但在公共子的 r.FormatConditions.Add Type:=xlExpression, Formula1:=formula 上收到“运行时错误'5':无效的过程调用或参数”。我不确定边界上的最后一位是否正确,因为运行时会停止宏。我还需要处理动态表引用,但我一次只处理一个问题。
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
【问题讨论】:
-
我首先记录一个将 CF 应用于一个表的宏。然后通过循环浏览工作簿中的每个工作表来展开它,如有必要,还可以通过这些工作表中的每个列表对象(表)进行循环。
-
将变量命名为与集合属性的保留字相同是一个严重的坏主意。
Formula1:=formula不建议使用,但.Color = color完全错误。 -
感谢 Jeeped 的提醒,我将重命名变量。
标签: vba excel conditional-formatting