Range.Offset变成了一个Double

问题描述 投票:0回答:1

我的Range对象有一个奇怪的行为:不知何故它变成了一个Double。

这是我的代码。

Sub Test()

    Dim RRange As Range
    Set RRange = ThisWorkbook.Worksheets("Sheet1").Range("R4")
    Set RRange = RRange.Offset(0, -1)
    UpdateConditionalFormatting (RRange)
    UpdateConditionalFormatting (ThisWorkbook.Worksheets("Sheet1").Range("R4"))

End Sub

所以UpdateConditionalFormatting的第一次调用会使程序崩溃(需要对象),第二次调用就可以了。这个子程序需要Range对象

我不知道这里出了什么问题 :(

Sub UpdateConditionalFormatting(ByVal rng As Range)

    With rng.FormatConditions.AddColorScale(ColorScaleType:=3)
     .SetFirstPriority
    .ColorScaleCriteria(1).Type = xlConditionValueLowestValue
    .ColorScaleCriteria(1).FormatColor.Color = 8109667
    .ColorScaleCriteria(2).Type = xlConditionValuePercentile
    .ColorScaleCriteria(2).Value = 50
    .ColorScaleCriteria(2).FormatColor.Color = 8711167
    .ColorScaleCriteria(3).Type = xlConditionValueHighestValue
    .ColorScaleCriteria(3).FormatColor.Color = 7039480

End With
End Sub
vba offset
1个回答
3
投票

只要去掉括号,使用

UpdateConditionalFormatting RRange

而不是

UpdateConditionalFormatting (RRange)

要么就是使用 Call 语法。

Call UpdateConditionalFormatting(RRange)

N.B: 你的第2次呼叫也提供了一个不同的... ... Range 因为你没有 Offset 它 - 这不会导致你得到的错误,但我只是想我会强调它。

© www.soinside.com 2019 - 2024. All rights reserved.