`is`运算符对于指向同一单元格的两个范围变量不返回true

时间:2015-02-12 16:30:02

标签: excel vba excel-vba reference equality

我有一个名为imera的自定义类,其中包含一个名为date_cell的范围属性。

在创建imera的集合时,每个imera的date_cell都设置为引用excel中的特定单元格。

尝试按date_cell搜索集合时:

Option Explicit
Public imeraCol as Collection
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 
"是"是"运算符似乎没有按预期工作并返回true,尽管我已经通过debug.print测试,在我的集合中存在一个将date_cell设置为范围的imera(" C27")。

因此,上面的“做某事”部分永远不会执行。

有没有解释为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

Is运算符只会在比较对象的相同实例时返回true。来自this MDSN article

  

Is运算符确定两个对象引用是否引用相同   宾语。但是,它不执行值比较。如果object1和   object2都指向完全相同的对象实例,结果为True;   如果他们不这样做,结果就是假的。

您可以比较day.date_cell.address来检查相同的范围。

If day.date_cell.Address = LastMetrisi.Address Then
   'Do Something...