2016-12-05 13 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 

ошибки, образуемый на каждой LIC в 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' в коллекцию? BTW, как правило, не полезно использовать имя класса в качестве имени переменной. – Rory

+1

'Dim lic As Variant', когда вы повторяете его. – Comintern

ответ

1

Спасибо, ребята, что фиксированная моя проблема.

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 
Смежные вопросы