Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:对范围变量使用.Range.Offset属性返回意外值_Excel_Variables_Range_Offset_Vba - Fatal编程技术网

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

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

我给了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(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保持在同一行看起来很难看。非常感谢!