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
并试着用它找到解决方案!)@为什么:调整大小确实更干净!试试这个;)哈-我想我问得太多了:谢谢,比用绳子乱搞要整洁得多。没问题,你也没问太多,只是为了让我走出我的习惯/混乱区,但这没那么可怕,别担心;)