我对vba不是很有经验,所以从基础知识开始,我似乎总会缺少一些东西。
我有一个名为" imera"的自定义类。其中我包含一个名为" date_cell"的范围属性。 在创建imera的集合时,每个imera的date_cell都会引用excel中的特定单元格。 所以现在我需要在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
请注意,该集合名为imeraCol,并声明为公开。
虽然我已经通过debug.print测试过,在我的集合中存在一个将date_cell设置为范围的imera(" C27"),上面的“做某事”部分永远不会执行。有人知道为什么会这样吗?
答案 0 :(得分:0)
将Address
设置为External
时使用True
。
外部:True表示返回外部参考。假回来了 本地参考。
注意:请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