如何检查两个范围变量之间的 "reference equality"

how to check "reference equality" between two range variables

我在vba方面不是很有经验,所以我似乎缺少一些东西,从基础开始。

我有一个名为 "imera" 的自定义 class,其中包含一个名为 "date_cell" 的范围 属性。 创建 imera 的 collection 时,每个 imera 的 date_cell 都会引用 excel 中的特定单元格。 所以现在我需要在 collection 中搜索 date_cell:

Sub searchByDateCell()
    Dim day As imera
    Dim LastMetrisi As Range
    Set LastMetrisi = Range("C27")
    For Each day In imeraCol
        If day.date_cell Is LastMetrisi Then
            'Do something
        End If
    Next day
    Set day = Nothing
End Sub

请注意,collection 称为 imeraCol,其声明为 public。

虽然我已经通过 debug.print 测试,在我的收藏中存在一个 date_cell 设置为范围("C27")的图像,但上面的“做某事”部分永远不会执行。有人知道为什么会这样吗?

使用 Address 并将 External 设置为 True

External: True to return an external reference. False to return a local reference.

注意:请注意 Range,考虑完全合格的参考,例如:Worksheets(3).Range("C27").

Option Explicit

Public imeraCol As Collection

Sub test()

    Dim imera1 As imera
    Set imera1 = New imera
    Set imera1.date_cell = Worksheets(1).Range("A1")

    Dim imera2 As imera
    Set imera2 = New imera
    Set imera2.date_cell = Worksheets(2).Range("B1")

    Dim imera3 As imera
    Set imera3 = New imera
    Set imera3.date_cell = Worksheets(3).Range("C27")

    Set imeraCol = New Collection

    ' When creating a collection of imera's,
    ' every imera's date_cell takes a reference to a specific cell in excel.

    imeraCol.Add imera1, "imera1"
    imeraCol.Add imera2, "imera2"
    imeraCol.Add imera3, "imera3"

    searchByDateCell
End Sub

Sub searchByDateCell()
    Dim day As imera
    Dim LastMetrisi As Range

    Set LastMetrisi = Worksheets(3).Range("C27")

    For Each day In imeraCol
        If day.date_cell.Address(external:=True) = LastMetrisi.Address(external:=True) Then
            Debug.Print day.date_cell.Address(external:=True) & " exists in collection"
        End If
    Next day
    Set day = Nothing
End Sub