2017-12-14 6 views
3

CASN (연결리스트와 같은 종류)을 보유 할 Collection 클래스를 생성하려고하는데, 클래스의 인스턴스화가 정확한지 확실하지 않습니다. 하지만 아래에있는 내 코드를 실행하려고 할 때마다, 나는그 자체의 콜렉션을 가진 VBA 클래스


코드 실행되고 설정하지 오류를

개체 변수 또는 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 

클래스 - 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과 경우 관련 일치하는 값이 있는지 확인하기 위해 노력하고있다 그 클래스의 DuplicateOf 컬렉션에 CASN 클래스의 cthisWeek 컬렉션에 추가하려는 일치입니다.

바라건대 말이야 ... 내 코드가 두 점을 비교할 때이 모든 점을 잘 알고있다. CASNCollection 's. 나는 철저하게 모든 것을 테스트하고 몇 가지 다른 방법을 시도하고 솔루션을

EDIT 찾을 수 없습니다했습니다

내 첫 번째 문제에 오류를 발견하지만 지금은 새로운 문제가 등장했습니다 .. .

+1

클래스의'Private pDuplicateOf As New Collection' 또는 콜렉션 내부 인스턴스 생성하기 당신의 class_Initialize 메소드. 중복이없는 경우 빈 컬렉션을 추가하지 않는다면'pDuplicateOf'는'Nothing'이 될 것입니다 (그리고'Nothing'에'Count'를 호출 할 수 없습니다). –

+0

@TimWilliams 따라서 클래스를 생성 할 때 do 모든 값을'Nothing' 또는'Null'으로 초기화하고 싶습니까? 'Class_Terminate'도 가져야하나요? 분명히 여기서 클래스를 제대로 생성하지 못하고있다. 또한,'Nothing'에'.Count'를 사용할 수 없다면 Collection이 비어 있는지 어떻게 체크 할까? – Maldred

+1

내 대답보기 –

답변

1

이것은 당신의 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이 필요한지 여부는 클래스 인스턴스가 "정리"를 수행해야하는지 여부에 따라 달라집니다 "(예 : 열려있는 파일 핸들이나 DB 연결을 닫습니다.)

+0

내 문제가 해결되었습니다!고마워 팀 톤 :) – Maldred

+0

당신의 editted 답변에 addon, 만약 이것이'UserForm'에로드되고 있다면'Class_Terminate' 올바른 것이 좋은 생각일까요? 또는 폼이 닫힐 때이 변수를 지우는'UserForm_Unload' 함수를 만들어야합니다. 내가 틀렸을 때 정정 해주세요. 그러나 폼이 닫히면 그냥 숨겨지고 "언로드"됩니다. – Maldred

+0

클래스 개체가 해제되어야하는 특정 리소스에 대한 핸들을 가지고 있지 않으면 여기에 class_terminate가 필요하다고 생각하지 않습니다. 변수가 범위를 벗어나면 자동으로 정리됩니다. –

관련 문제