我正在使用Excel 2013.在我的代码中,我提到我必须在Excel工作表中操作典型数据。例如:
**Names**
Ann
Jim
Tom
Liz
在引用我的数据集中的特定单元格时,我不想在代码中包含 +1 。
即,要获得“Ann”,我宁愿使用
Cells(1,1)
大于
Cells (1+1,1)
所以我定义了一个不包括标题的范围:
Set R = Range(Cells(2,1),Cells(5,1)
现在这句话是指“安”
R.Cells(1,1)
接下来我想引用我的范围 R 中的“子范围”:
R.Range(R.Cells(2,1), R.Cells(3,1))
但令人惊讶的是,现在,而不是预期的“吉姆”和“汤姆”(我的范围内的第二到第三个细胞 R ),我得到了“安”和“吉姆”(第二到第三)在 Excel表格)中。
任何人都可以提供一些关于我在这里缺少什么的见解吗?
由于
答案 0 :(得分:1)
这是一个不传递继承父母的经典案例。 Cells
中的R.Range(Cells(2,1), Cells(3,1))
不知道它们属于R
所以它们默认为ActiveSheet property,这可能是也可能不是R
所属的工作表on( Subscript超出范围错误的问题更多)。
with R
debug.print .Range(.Cells(2,1), .Cells(3,1)).address
end with
With ... End With statement是传递继承父级的最简单方法。请注意,.Cells
而非Cells
用于传递引用。它也可以写成,
debug.print R.Range(R.Cells(2,1), R.Cells(3,1)).address
示例子:
Sub Unexpected_result_with_Range_and_Cells()
Dim R As Range
Set R = Range(Cells(2, 1), Cells(5, 1))
Debug.Print R.Address
Debug.Print R.Cells(1, 1).Value
With R
Debug.Print .Range(.Cells(2, 1), .Cells(3, 1)).Address
Debug.Print .Cells(2, 1).Value
Debug.Print .Cells(3, 1).Value
End With
End Sub
VBE立即窗口的结果:
$A$2:$A$5
Ann
$A$4:$A$5
Jim
Tom