[英]What's the difference between Range.Item and Range.Cells?
例如,在下面的代碼中, 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)
? 我錯過了什么?
理解這一點的最佳方法是通過以下示例
當.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
的地址,其中Cells
描述了ActiveSheet
單元格的地址
除了引用工作表中的所有單元格之外,我看不到 Cells 屬性的任何用途。 我會這樣說,(基於我的實驗和研究):
Cells 屬性返回一個范圍對象,其中包含應用它的對象的所有單元格。 對於工作表的情況,它顯然很有用,以便能夠在整個工作表上使用范圍對象的所有屬性。 對於 Range 對象的情況,我不確定它是否有任何用處。 例如,如果不首先將 Cells 屬性應用於該 Range 對象,我就無法找到無法從 Range 對象的屬性中獲取的任何額外屬性
我想知道這些年來它在代碼中的某些用途是否剛剛“悄悄進入”。 例如,我相信這種類型的代碼行是使用范圍對象項屬性 Ws.Range("A1").Areas.Item(1) 引用工作表中第二個單元格的范圍對象的一種可能的顯式方式。 Item(1, 2) 按照感覺上所說的,我可以依靠隱含的第一個區域和 Item 的默認屬性來重寫該代碼行: Ws.Range("A1")(1, 2)
如果我加入 Cells Property ,我不會傷害 Ws.Range("A1").Cells(1, 2)
但我建議:_(i) 在這里使用 Cells 是完全多余的 _(ii) 我仍然在這里使用 Range Item 屬性。 _(iii) 沒有 Cells 項目屬性 _(iv) 像 Cells(1, 2) 這樣的代碼部分已經“悄悄進入”作為所謂的“ Cells 屬性”,它將接受一個或兩個參數...... ..”..and/ or ...”單元格有一個 Item 屬性.. .. ”...etc... ,. 我認為這些陳述可能是不正確的。 我認為 Cells 屬性沒有任何爭議。 (我不太確定 Cells 是否可能有一個 Item 屬性。我不是計算專家,但專家告訴我,intellisense 提供它,或者 Microsoft 幫助暗示它不能保證它存在。我希望沒有 Cells Item 屬性)
在所有情況下,像 Cells(1, 2) 這樣的代碼部分解釋如下: Cells 返回一個 Range 對象。 該 Range 對象具有其默認屬性,即應用於它的 Range 對象項屬性。 除非我將單元格獨立用於一個范圍,否則我應該忽略它。 我建議這樣做,因為在這種情況下,我不是明確的。 相反,我正在促成一個可能是錯誤的想法,即我可以通過 _.. _.. “ Cells(_argument/s_) 類型”屬性來引用范圍對象,.. 可能不存在。
艾倫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.