【问题标题】:Excel VBA: Using .Range.Offset property on a range variable returns unexpected valuesExcel VBA:在范围变量上使用 .Range.Offset 属性会返回意外值
【发布时间】:2017-06-01 01:47:23
【问题描述】:

我对 Stack Exchange 和 Google 进行了很好的搜索,但我找不到我正在寻找的确切答案。

我无法理解使用 RangeVariable.Range.Offset 而不是 Worksheet.Range.Offset 返回的值

我定义了一个从 A2 到 J10 的范围,所以跳过第一行:

Dim myRange As Range
Set myRange = ActiveSheet.Range("A2", "J10")

所以现在我使用 .Offset(0 rows, 9 columns) 进行测试:

MsgBox myRange.Range("A1").Offset(0, 9).Address

我按预期返回“$J$2”,因为此范围的“A1”在工作表本身上是“A2”。

但现在我使用上面的作为另一个 .Range 属性测试的第二个参数:

MsgBox myRange.Range("A1", myRange.Range("A1").Offset(0, 9)).Address

我返回“$A$2:$J$3”,所以看起来它跳过了计算第二个参数的行,即使行偏移量为零,它最终还是一个 2 行范围。

如果我将行偏移量更改为 -1,它会返回“$A$2:$J$2”,所以只有一行。

我通常使用 Worksheet.Range 来定义范围,它总是按预期工作。 谁能想到为什么使用 RangeVariable.Range.Offset 作为范围属性的第二个参数可能会这样工作?

干杯,斯蒂芬

【问题讨论】:

    标签: excel variables range offset vba


    【解决方案1】:

    我依稀记得之前的一个问题,我不记得它是否得到了回答,但这给出了预期的输出:

    Range(myRange.Range("A1"), myRange.Range("A1").Offset(0, 9)).Address
    

    编辑:就是这样 - selecting a range within a range

    EDIT2:我会发现这更容易使用 -

    myRange.Range("A1").Resize(1,10).Address
    

    【讨论】:

    • 嗨,蒂姆,这正是我所追求的。我现在有一个更好看的宏,我讨厌为了得到正确的输出而捏造逻辑。使用 -1 的行偏移值保持在同一行看起来很难看。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多