Excel VBA:对范围变量使用.Range.Offset属性会返回意外值



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

我很难理解使用RangeVariable.Range.Offset返回的值,而不是Worksheet.Range.Offset

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

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

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

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

我按预期返回"$J$2",因为这个范围的"A1"在表上是"A2"。

但现在我用上面的作为另一个的第二个论点。范围属性测试:

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作为Range属性的第二个参数可能会这样工作吗?

干杯,Stephen

我模糊地记得前面的一个问题,我不记得它是否得到了回答,但这给出了预期的输出:

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

编辑:就是这样-在范围内选择一个范围

编辑2:我会发现这更容易使用-

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

最新更新