我正在尝试创建一个包含Collection的类,该类将容纳其他CASN(有点像链表),但不确定该类的实例是否正确。但是每次我尝试在下面运行代码时,都会收到错误消息


对象变量或未设置With块




代码正在运行:

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的时候都可以正常工作。我已经对所有内容进行了全面测试,并尝试了几种不同的方法,但似乎找不到解决方案

编辑:

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

最佳答案

这将是对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将取决于您的类实例在销毁之前是否需要执行任何“清理”(例如,关闭所有打开的文件句柄或数据库连接)。

关于vba - 具有自身集合的VBA类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47818342/

10-10 18:58