如何检查两个范围变量之间的 "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
我在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