使用VBA更新条件格式范围



我正在尝试更新工作表上大约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")

最新更新