Excel VBA:对范围变量使用.Range.Offset属性返回意外值
我给了Stack Exchange和Google一个很好的搜索,但我找不到我想要的确切答案 我无法理解从使用RangeVariable.Range.Offset而不是工作表.Range.Offset返回的值 我定义了从A2到J10的范围,因此跳过第一行:Excel VBA:对范围变量使用.Range.Offset属性返回意外值,excel,variables,range,offset,vba,Excel,Variables,Range,Offset,Vba,我给了Stack Exchange和Google一个很好的搜索,但我找不到我想要的确切答案 我无法理解从使用RangeVariable.Range.Offset而不是工作表.Range.Offset返回的值 我定义了从A2到J10的范围,因此跳过第一行: Dim myRange As Range Set myRange = ActiveSheet.Range("A2", "J10") 现在我使用.Offset0行9列进行测试: MsgBox myRange.Range("A1").Offset
Dim myRange As Range
Set myRange = ActiveSheet.Range("A2", "J10")
现在我使用.Offset0行9列进行测试:
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,因此只有一行
我通常使用工作表.Range来定义范围,它总是按预期工作。
有人能想一想为什么对Range属性的第二个参数使用RangeVariable.Range.Offset可以这样工作吗
干杯,斯蒂芬我依稀记得前面的一个问题,我不记得是否有人回答过,但这给出了预期的结果:
Range(myRange.Range("A1"), myRange.Range("A1").Offset(0, 9)).Address
编辑:就是这样-
EDIT2:我觉得这更容易处理-
myRange.Range("A1").Resize(1,10).Address
嗨,蒂姆,这正是我想要的。我现在有了一个更好看的宏,我讨厌为了得到正确的输出而捏造逻辑。使用行偏移量值-1保持在同一行看起来很难看。非常感谢!