例如,在下面的代码中,Item
和Cells
可以互换使用:
Dim rRange As Range
Set rRange = ThisWorkbook.ActiveSheet.Range("A1")
With rRange
Debug.Print .Item(1, 1).Value ' Outputs value of "A1"
Debug.Print .Cells(1, 1).Value ' Outputs value of "A1"
Debug.Print .Item(2, 1).Value ' Outputs value of "A2"
Debug.Print .Cells(2, 1).Value ' Outputs value of "A2"
End With
在开发人员参考中,它们被定义为:
返回一个Range对象,该对象表示偏移量的范围 指定范围。
〜
返回一个Range对象,该对象表示指定范围内的单元格。
说明
因为Item属性是Range对象的默认属性,所以可以在Cells关键字之后立即指定行和列索引。
从那句话来看,这是否意味着Cells(1, 1)
实际上是Cells.Item(1, 1)
的缩写?因此Cells(1, 1)
实际上相当于Item(1, 1)
?我错过了什么?
答案 0 :(得分:6)
理解这一点的最佳方法是通过以下示例
对于范围使用.Item
和.Cells
时,是,它们是相同的。例如
Sub Sample()
Dim rRange As Range
Set rRange = ThisWorkbook.ActiveSheet.Range("B1:C10")
With rRange
Debug.Print .Item(1, 3).Address '<~~ $D$1
Debug.Print .Cells(1, 3).Address '<~~ $D$1
End With
End Sub
在上文中,它们都描述了Range
当Cells()
独立于范围使用时,它们是不同的。
Sub Sample()
Dim rRange As Range
Set rRange = ThisWorkbook.ActiveSheet.Range("B1:C10")
With rRange
Debug.Print .Item(1, 3).Address '<~~ $D$1
'~~> DOT before Cells missing
Debug.Print Cells(1, 3).Address '<~~ $C$1
End With
End Sub
上面的.Item
描述了Range
中单元格的地址,其中Cells
描述了ActiveSheet
答案 1 :(得分:-1)
除了用于引用工作表中的所有单元格之外,我看不到使用Cells属性。 我会这样说,(基于我的实验和研究):
Cells属性返回一个Range对象,其中包含应用它的Object的所有单元格。 对于工作表的情况,它显然是有用的,以便能够在整个工作表上使用范围对象的所有属性。 对于Range对象的情况,我不确定它是否有任何用处。例如,在没有首先将单元格属性应用于该范围对象的情况下,我找不到任何我无法从范围对象的属性中获取的额外属性
我想知道多年来它在代码中的一些用法是否只是“ crept in ”。例如,我相信这种类型的代码行是使用Range Object Item属性引用工作表中第二个单元格的Range对象的一种可能的显式方法 Ws.Range(“A1”)。Areas.Item(1).Item(1,2) 根据所说的感觉,我可以依赖于Item的第一个Area和Default Property隐含的隐含来重写该代码行: Ws.Range(“A1”)(1,2)
如果我放入细胞属性,我没有伤害 Ws.Range(“A1”)。单元格(1,2)
但我会建议: _(i)在这里使用细胞是完全多余的 _(ii)我仍然在这里使用Range Item Property。 _(iii)没有单元格项属性 _(iv)像这样的单元格(1,2)具有“ crept in ”作为所谓的“ Cells属性,它将接受一个或两个参数.. ......“......和/或......”单元格有一个Item属性.. 。“......等...... ,.我认为这些陈述可能不正确。 我认为Cells属性没有争论。 (我不太确定Cell是否有项目属性。我不是计算专业人员,但是专家告诉我提供它的intellisense,或Microsoft帮助表明它不能保证它存在。我希望没有Cell Item属性)
在所有情况下,像这样的代码部分,单元格(1,2),解释如下: 单元格返回一个Range对象。该Range对象具有默认属性,应用了Range Object Item属性。除非我独立使用Cell到Range,否则我应该省略它。 我建议这样做,在这种情况下,我不是明确的。相反,我正在贡献一个可能是错误的想法,我可以通过_引用一个范围对象。 _ ..“ Cells(_argument / s_)类型”属性,......可能不存在。
艾伦