2017-02-20 2 views
0

Ich versuche, eine Eigenschaft eines Objekts festzulegen, das Teil eines Klassenobjekt-Arrays für Excel in VBA ist.Festlegen der Klassenobjekt-Array-Eigenschaft

Der Code sieht wie folgt aus:

Dim myClass(5) as class1 
Dim i as integer 

For i = 0 to 5 
    set myClass(i) = New class 
    myClass(i).myProperty = "SomeValue" 
Next i 

Klasse-Code ist einfach:

Private pmyProperty as string 

Public Property Let myProperty(s as string) 
    pmyProperty = s 
End Property 
Public Property Get myProperty() as string 
    myProperty = pmyProperty 
End Property 

Jedoch, wenn ich diese laufen, bekomme ich einen Compiler-Fehler "erwartet. Listentrennzeichen" Dies trifft auf die Zeile myClass (i) .myProperty = "SomeValue".

Wie setze ich den Wert einer Eigenschaft eines Klassenobjekts, das Teil eines Arrays ist?

Jede Hilfe wäre großartig!


So der eigentliche Code wird wie folgt ...

Modulcode:

Public Sub main_sb_BillingApp() 


    Dim intCountComplete As Integer 
    Dim intLastRow As Integer 
    Dim Line() As clsLine 
    Dim i As Integer, x As Integer 

    intCountComplete = WorksheetFunction.CountIf(Sheets(WS_NAME).Columns(COL_W_COMPLETE), "Yes") 
    intLastRow = Sheets(WS_NAME).Cells(LAST_ROW, COL_W_COMPLETE).End(xlUp).Row - 1 

    ReDim Line(intCountComplete - 1) 

    For i = ROW_W_HEADER + 1 To intLastRow 

     If Sheets(WS_NAME).Cells(i, COL_W_COMPLETE) = "Yes" Then 

      Set Line(x) = New clsLine 
      Line(x).Row = i 
      x = x + 1 

     End If 

    Next i 

End Sub 

Class Code:

Private pDate As Date 
Private pUJN As String 
Private pDesc As String 
Private pCharge As Currency 
Private pCost As Currency 
Private pMargin As Double 
Private pComplete As Boolean 
Private pRow As Integer 

Public Property Let Row(i As Integer) 
    pRow = i 
    Update 
End Property 
Public Property Get Row() As Integer 
    Row = pRow 
End Property 

Private Sub Update() 

    With Sheets(WS_NAME) 

     pDate = .Cells(pRow, COL_W_DATE) 
     pUJN = .Cells(pRow, COL_W_UJN) 
     pDesc = .Cells(pRow, COL_W_DESC) 
     pCharge = .Cells(pRow, COL_W_CHARGE) 
     pCost = .Cells(pRow, COL_W_COST) 
     pMargin = .Cells(pRow, COL_W_MARGIN) 

     If .Cells(pRow, COL_W_COMPLETE) = "Yes" Then 
      pComplete = True 
     Else 
      pComplete = False 
     End If 

    End With 
End Sub 
+2

Ist es VB.NET * oder * Vba * oder * VBScript? – Plutonix

+0

zeigen relevanten 'class' Code – user3598756

+0

Der Code, den ich verwende, ist VBA für Excel. – Nicolas

Antwort

4

Line ist ein VBA reserviertes Schlüsselwort, so dass Sie verwirren den Compiler. Ändern Sie den Namen Ihres Objekt-Array und es funktioniert ganz gut:

Dim lineArray() As clsLine 
'... 

     Set lineArray(x) = New clsLine 
     lineArray(x).Row = i  
+0

Änderte den Namen und arbeitete perfekt! Danke für Ihre Hilfe! – Nicolas

Verwandte Themen