2016-12-05 68 views
1

似乎我在vba編程方面有點生疏。我創建了許可證類型(類/對象),並希望將其添加到集合類型中。我試圖遍歷集合,但不斷獲取對象所需的錯誤424.下面的代碼片段提示。在此先感謝收藏vba中需要的對象

Private Sub btnGenerate_Click() 
    Dim lic As licence 

    For Each lic In licenceCollection 
     Debug.Print lic.getClause 
    Next lic 


End Sub 

錯誤licenceCollection

Private Sub cboHeading_Change() 

    Dim heading As String 
    Dim str As String 
    'Dim lic As Licence 

    Dim rngValue As Range 
    Dim ws As Worksheet 
    Dim last_row As Long 
    Dim arr() 
    Dim i As Long 
    'Dim lic As licence 





    heading = cboHeading.Value 

    Set licenceCollection = New collection 



    Select Case heading 
     Case "Future Sampling" 
      'str = "lorem ipsum" 
      'Utility.createCheckBoxes (str) 

      'grab data from Future Sampling ws 
      Set ws = Worksheets("Future_Sampling") 
      ws.Activate 
      last_row = Range("A2").End(xlDown).Row 
      Debug.Print last_row 

      ReDim arr(last_row - 2) 
      'add array to object type 
      For i = 0 To last_row - 2 
       arr(i) = Range("A" & i + 2) 
       'Debug.Print arr(i) 
      Next 

      Set licence = New licence 
      licence.setClause = arr 
      'Debug.Print lic.getDescription 

      'add licence to collection for later retrieval 
      licenceCollection.Add (arr) 

     Case Else 
      Debug.Print ("no heading") 
    End Select 


    'Set lic = Nothing 

End Sub 


Private Sub UserForm_Initialize() 
    Dim rngValue As Range 
    Dim ws As Worksheet 

    Set ws = Worksheets("Headings") 

    For Each rngValue In ws.Range("A2:A10") 
     Me.cboHeading.AddItem rngValue.Value 
    Next rngValue 

    'licenceForm.cboHeading.SetFocus 
    'create vertical scrollbar 
    With Me.resultFrame 
     .ScrollBars = fmScrollBarsVertical 
    End With 
End Sub 
+1

爲什麼你添加'arr'而不是'licence'到集合中?順便說一句,通常對於使用類名作爲變量名也沒有幫助。 – Rory

+1

當你迭代它時,'Dimlic As Variant'。 – Comintern

回答

1

謝謝你們生產的每一個LIC,即固定我的問題。

Private Sub btnGenerate_Click() 
    Dim i As Long 
    Dim lic As licence 
    Dim temp As Variant 

    For Each lic In licenceCollection 
     temp = lic.getClause 
    Next lic 

    For i = LBound(temp) To UBound(temp) Step 1 
     Debug.Print temp(i) 
    Next 
End Sub 

Private Sub cboHeading_Change() 

Dim heading As String 
Dim str As String 
'Dim lic As Licence 

Dim rngValue As Range 
Dim ws As Worksheet 
Dim last_row As Long 
Dim arr() 
Dim i As Long 
Dim lic As licence 





heading = cboHeading.Value 

Set licenceCollection = New collection 



Select Case heading 
    Case "Future Sampling" 
     'str = "lorem ipsum " 
     'Utility.createCheckBoxes (str) 

     'grab data from Future Sampling ws 
     Set ws = Worksheets("Future_Sampling") 
     ws.Activate 
     last_row = Range("A2").End(xlDown).Row 
     Debug.Print last_row 

     ReDim arr(last_row - 2) 
     'add array to object type 
     For i = 0 To last_row - 2 
      arr(i) = Range("A" & i + 2) 
      'Debug.Print arr(i) 
     Next 

     Set lic = New licence 
     lic.setClause = arr 
     'Debug.Print lic.getDescription 

     'add licence to collection for later retrieval 
     licenceCollection.Add lic 


    Case Else 
     Debug.Print ("no heading") 
End Select 


'Set lic = Nothing 

End Sub