Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何更新/更改所有条件规则的最后一行';范围_Vba_Excel_Excel 2013_Conditional Formatting - Fatal编程技术网

Vba 如何更新/更改所有条件规则的最后一行';范围

Vba 如何更新/更改所有条件规则的最后一行';范围,vba,excel,excel-2013,conditional-formatting,Vba,Excel,Excel 2013,Conditional Formatting,以下是我们的条件格式规则: 实际情况要复杂得多,尽管每个AppliesTo范围的第一行始终为5 导入新数据后,每个AppliesTo范围的最后一行可能会更改为15 我们如何使用vba应用此更改? 这是我们当前的循环,用于查找每个AppliesTo范围: Sub updateAllCondFormatRules() Dim x As Excel.FormatCondition Dim r As Range Dim lastRw As Integer Dim

以下是我们的条件格式规则:

实际情况要复杂得多,尽管每个
AppliesTo
范围的第一行始终为5

导入新数据后,每个
AppliesTo
范围的最后一行可能会更改为15

我们如何使用
vba
应用此更改?

这是我们当前的循环,用于查找每个
AppliesTo
范围:

Sub updateAllCondFormatRules()

    Dim x As Excel.FormatCondition
    Dim r As Range

    Dim lastRw  As Integer
    Dim newLastRw  As Integer
    newLastRw = 15

    For Each x In ActiveSheet.Cells.FormatConditions
        Set r = x.AppliesTo
        MsgBox r.Address

        '>>here we need to change r so that the new last row is equal to newLastRw

        x.ModifyAppliesToRange r
    Next x

End Sub

我对
x
对象的类型有问题,但这段代码似乎有效:

Sub updateAllCondFormatRules()

    Dim x As Excel.FormatCondition
    Dim r As Range
    Dim lastRw  As Long
    Dim newLastRw  As Long

    newLastRw = 20

    For Each x In ActiveSheet.Cells.FormatConditions
        Set r = x.AppliesTo

        MsgBox r.Address
        '>>here we need to change r so that the new last row is equal to newLastRw
        'Set r = ActiveSheet.Range(Replace(r.Address, Split(r.Address, "$")(UBound(Split(r.Address, "$"))), newLastRw))
        Set r = r.Resize(newLastRw - r.Cells(1, 1).Row + 1, r.Columns.Count)
        MsgBox r.Address

        x.ModifyAppliesToRange r
    Next x

End Sub

好的-这很有效(非常夸张):虽然我假设使用
Offset
Resize
,答案会更优雅一点?呵呵,抱歉这么简单,我会考虑
Resize
并试着用它找到解决方案!)@为什么:调整大小确实更干净!试试这个;)哈-我想我问得太多了:谢谢,比用绳子乱搞要整洁得多。没问题,你也没问太多,只是为了让我走出我的习惯/混乱区,但这没那么可怕,别担心;)