Excel VBA: 在范围变量 returns 上使用 .Range.Offset 属性 意外值

Excel VBA: Using .Range.Offset property on a range variable returns unexpected values

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

我无法理解使用 RangeVariable.Range.Offset 编辑的值 return,而不是 Worksheet.Range.Offset

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

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

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

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

I return "$J$2" 正如预期的那样,看到这个范围的 "A1" 在 sheet 本身上是 "A2"。

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

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

I return "$A$2:$J$3", 所以看起来它在计算第二个参数时跳过了一行,即使行偏移量为零,它最终也是一个 2 行范围.

如果我将行偏移量更改为 -1,它 returns "$A$2:$J$2",所以只有一行。

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

干杯,斯蒂芬

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

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

编辑:就是这样 -

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

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