带有自身集合的VBA类

时间:2017-12-14 16:45:09

标签: vba excel-vba class excel

我正在尝试创建一个带有Collection的类,它将保存其他CASN(有点像链接列表),我不确定我的类的实例是否是正确。但每次我尝试运行下面的代码时,都会收到错误

  

对象变量或未设置块

代码运行:

If (Numbers.count > 0) Then
   Dim num As CASN
   For Each num In Numbers
      If (num.DuplicateOf.count > 0) Then   'ERROR HERE
         Debug.Print "Added " & num.REF_PO & " to list"
         ListBox1.AddItem num.REF_PO
      End If
   Next num
End If

CLASS - CASN:

Private pWeek As String
Private pVendorName As String
Private pVendorID As String
Private pError_NUM As String
Private pREF_PO As Variant
Private pASN_INV_NUM As Variant
Private pDOC_TYPE As String
Private pERROR_TEXT As String
Private pAddressxl As Range
Private pDuplicateOf As Collection



'''''''''''''''' Instantiation of String, Long, Range etc.
'''''''''''''''' Which I know is working fine


''''''''''''''''''''''
' DuplicateOf Property
''''''''''''''''''''''
Public Property Get DuplicateOf() As Collection
   Set DuplicateOf = pDuplicateOf
End Property
Public Property Let DuplicateOf(value As Collection)
   Set pDuplicateOf = value
End Property
''''' What I believe may be the cause

基本上我所做的是创建了两个CASN类Collection,我试图比较两者,看看是否有任何与变量.REF_PO相关的匹配值,如果有的话我希望将其添加到该类的cthisWeek集合中的CASNDuplicateOf集合中。

希望这很有意义......我知道我的所有代码在比较两个CASN Collection时都很有用。我已经彻底测试了一切并尝试了一些不同的方法,似乎无法找到解决方案

修改

我在第一期发现了错误,但现在出现了一个新问题......

1 个答案:

答案 0 :(得分:2)

这对Get方法来说是一个相对简单的修复:

Public Property Get DuplicateOf() As Collection
   If pDuplicateOf Is Nothing Then Set pDuplicateOf = New Collection
   Set DuplicateOf = pDuplicateOf
End Property

编辑:解决您的问题 - "因此,在创建课程时,是否要将所有值初始化为Nothing或Null?我也应该有Class_Terminate吗?"

答案是"它取决于" - 通常不需要将所有类属性设置为某个特定值:大多数非对象属性已经具有其特定变量类型的默认值。您只需要了解未设置变量的影响 - 主要是当它们是对象类型时。

您是否需要Class_Terminate取决于您的班级实例是否需要执行任何"清理" (例如,关闭所有打开的文件句柄或数据库连接),然后才能销毁它们。