我正在尝试创建一个包含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
集合中CASN
的DuplicateOf
集合中。希望这有道理...我知道我的所有代码在比较这两个
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/