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
我已经对 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