我创建了以下子部分来简单说明问题。我将活动工作表的范围A2:E10分配给范围变量。然后,到另一个范围变量,我将此范围的子范围(单元格(1,1))分配给(3,3)。Excel vba:将范围创建为另一个范围的子范围时可能存在的错误
我会预期这将包括该范围A2至C4(因为A2是第一栏,较大范围的第一行)。但是,当我调用每个范围的第一个单元格的.Row方法时,我得到不同的结果:较大范围r返回“2”,而较小范围rSub返回“3”。
(该.Row方法返回的范围内的绝对排它被要求)
我希望这两个调用返回2,因为他们都应该引用单元格A2。任何人都可以解释为什么这不是这样吗?
*编辑:我刚才已经改变了子,以便它调用每个范围内的第一个单元格的.COLUMN方法,因为它的.Row方法。正如您所预料的那样,这将为这两个范围返回“1”。
Sub test()
Dim r As Range
Set r = Range("A2:E10")
MsgBox r.Cells(1).Row '= 2
Dim rSub As Range
With r
Set rSub = .Range(.Cells(1, 1), .Cells(3, 3))
End With
MsgBox rSub.Cells(1).Row '= 3
End Sub
我发现,如果你之前的“细胞”,而不是“范围”前的一个取出点,它也适用。我本以为这样做会强制vba使用属于活动工作表的单元格,而不是r或rSub。 我想过了,我认为它在计算范围时使用了.Row和.Column值。因此对于rsub的.Cells(1,1),Row的值是2.范围的开始也是2.所以它必须做一些类似于“CellRow - RangeStartRow + 1”的事情,因此它会出现3 – Swiftslide