`Is` 运算符不会返回 true

问题描述 投票:0回答:1

我有一个名为

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 

“Is”运算符似乎没有按预期工作并返回 true,尽管我已经通过 debug.print 进行了测试,在我的集合中存在一个 date_cell 设置为 range("C27") 的 imera。

因此,“上面的执行某些操作”部分永远不会执行。

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

vba excel reference equality
1个回答
3
投票

Is
运算符仅在比较对象的相同实例时才会返回true。来自这篇 MDSN 文章

Is 运算符确定两个对象引用是否引用相同的对象 目的。但是,它不执行值比较。如果对象1和 object2 都引用完全相同的对象实例,结果为 True; 如果不这样做,结果为 False。

您可以比较

day.date_cell.address
来检查是否相同的范围。

If day.date_cell.Address = LastMetrisi.Address Then
   'Do Something...
© www.soinside.com 2019 - 2024. All rights reserved.