簡體   English   中英

Range.Item 和 Range.Cells 有什么區別?

[英]What's the difference between Range.Item and Range.Cells?

例如,在下面的代碼中, ItemCells可以互換使用:

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.Item 屬性 (Excel)

返回一個 Range 對象,該對象表示與指定范圍偏移的范圍。

~

Range.Cells 屬性 (Excel)

返回一個 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描述了該RangeCells的地址,其中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM