我正在尝试更新工作表上大约30行数据的条件格式范围。每个月我都会更新数据,我想运行一个宏来调整范围,以包含新的月份。我已经为我的图表做了这件事,通过循环ChartObjects和SeriesCollection来更新系列范围的末尾。
为了在条件格式上做到这一点,我发现的所有内容都需要硬编码一个范围(单元格引用或命名范围),例如:
With Worksheets(1).Range("e1:e10").FormatConditions(1)
我更愿意只循环浏览工作表的条件格式集合,但在Excel VBA对象模型中找不到该集合的任何证据。我是不是遗漏了什么?
这有点复杂,因为在工作表中没有任何很好的方法来循环formatconditions
。但是,你可以循环通过特殊细胞,然后循环通过它们的formatconditions
,然后从那里挖掘:
Sub test()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim rngCell As Range
Dim lng As Long
For Each rngCell In ws.Cells.SpecialCells(xlCellTypeAllFormatConditions).Cells
For lng = 1 To rngCell.FormatConditions.Count
On Error Resume Next
Debug.Print rngCell.FormatConditions(lng).Formula1, rngCell.FormatConditions(lng).AppliesTo.Address
Next lng
Next rngCell
End Sub
我从Dick Kusleika在dailydosexel.com博客上关于这个主题的精彩帖子中挖到了specialcells()
的想法。
您可以使用以下代码:此处根据条件以黄色突出显示行。您可以使用格式化
LastColumnARows = WB_Source.Sheets(SheetName.Name).range("A" & Rows.Count).End(xlUp).Row
With WB_Source.Sheets(SheetName.Name)
For i = 2 To LastColumnARows
If .range("A" & i).Value > [Condition] Then
With .range("A" & i & ":E" & i)
.Interior.Color = vbYellow
.Font.Color = vbBlack
End With
End If
Next i
End With
要在电子表格中循环现有的格式条件,可以使用这样的循环:
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("MySheet")
Dim AllFormatConditions As FormatConditions
Set AllFormatConditions = ws.Cells.FormatConditions
Dim fc As Object
For Each fc In AllFormatConditions
Debug.Print fc.AppliesTo.Address
Next
现在,如果你想修改AppliesTo范围,而不是像上面那样只打印地址,你需要使用ModifyAppliesToRange并传递一个范围作为参数。
例如。
fc.ModifyAppliesToRange ws.Range("A42:Z42")