我正在使用一个表(Excel 365),其中包含 50 列和大约 7000 行(不断增加)。该表的格式为 ListObject。到目前为止一切顺利。
现在我需要处理 8 列(不是彼此相邻且同时)的地址,以便为它们分配 4 种不同的条件格式。程序
Set condition = rng.FormatConditions.Add(xlExpression, Formula1:="=.....")
显然不可能从 ListObject 创建另一个数组(消息:类型不兼容)。至少我现在还没有找到办法。我也试过了
With rng
.FormatConditions.Add
.....但 VBA 总是要求“=”。
有人有什么想法吗?有可能吗? 感谢您的帮助!
您的任务是在应用格式条件之前将
rng
设置为正确的范围。可以使用 ListColumns
访问表格的列。这是表中所有列的集合。因此,您可以通过索引或通过列名称来寻址单个列(列的名称由标题单元格定义)。
列的范围可以通过属性
Range
访问。但是,这包括标题行,通常您不想将格式应用于标题。相反,您可以使用属性 DataBodyRange
,这会省略标题单元格。
要获取所有感兴趣列的所有单元格,只需使用
Union
命令即可。
所以你的代码可能如下所示:
Dim table As ListObject
Set table = ActiveSheet.ListObjects(1) ' Change to your needs
Dim rng As Range
' Define the list of columns you want to use.
Dim colList, i As Long
colList = Array(2, 3, 5) ' Either by index...
colList = Array("Name", "Street", "Info") ' ... or by name
' Loop over the columns and build the Range
For i = LBound(colList) To UBound(colList)
Dim col As ListColumn
Set col = table.ListColumns(colList(i))
If rng Is Nothing Then
Set rng = col.DataBodyRange
Else
Set rng = Union(rng, col.DataBodyRange)
End If
Next
' Optional: Remove existing FormatConditions
Do While table.DataBodyRange.FormatConditions.Count > 0
table.DataBodyRange.FormatConditions(1).Delete
Loop
' Now set new FormatConditions for the Range
Dim fc As FormatCondition
Set fc = rng.FormatConditions.Add(xlExpression, Formula1:="=" & rng.Cells(1).Address(False, False) & ">5")
fc.Interior.Color = vbYellow
请注意,一旦您将条件格式应用于表格列,当您添加新行时,它就会“增长” - 换句话说,新行将自动具有相同的格式。