excel 使用VBA更新条件格式设置范围?

rjzwgtxy  于 2023-05-30  发布在  其他
关注(0)|答案(3)|浏览(193)

我正在尝试更新工作表上大约30行数据的条件格式设置范围。每个月我更新数据,我想运行一个宏来调整范围,以纳入新的一个月。我已经通过循环ChartObjects和SeriesCollection更新了系列范围的末尾,从而为我的图表完成了这一操作。
要在条件格式上做到这一点,我发现的所有内容都需要硬编码一个范围(单元格引用或命名范围),例如:

With Worksheets(1).Range("e1:e10").FormatConditions(1)

我更喜欢循环遍历工作表的条件格式集合,但在Excel VBA对象模型中找不到此集合存在的任何证据。我错过了什么吗?

j2cgzkjk

j2cgzkjk1#

这有点复杂,因为在工作表中并没有什么好的方法来循环遍历formatconditions。但是,你可以循环遍历specialcell,然后循环遍历它们的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

我从www.example.com博客上的Dick Kusleika's excellent post on this very subject中剽窃了specialcells()的想法dailydoseofexcel.com。

zrfyljdw

zrfyljdw2#

你可以使用如下代码:此处基于条件以黄色突出显示行。您可以使用您的格式

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
vd8tlhqk

vd8tlhqk3#

要在电子表格中的现有格式条件上循环,可以使用如下循环:

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")

相关问题