2017-02-20 8 views
0

Я пытаюсь установить свойство объекта, который является частью массива объектов класса, для excel в VBA.Установка свойства объекта класса объекта

код выглядит следующим образом:

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 

код класса просто:

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 

Однако, когда я запускаю это, я получаю ошибку компиляции "ожидаемый: разделитель списка." Это касается строки myClass (i) .myProperty = "SomeValue".

Как установить значение свойства объекта класса, являющегося частью массива?

Любая помощь будет замечательной!


Таким образом, фактический код выглядит следующим образом ...

код модуля:

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 

Код класса:

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

Это VB.NET * или * vba * или * vbscript? – Plutonix

+0

показать соответствующий код 'class' – user3598756

+0

Код, который я использую, - это VBA для Excel. – Nicolas

ответ

4

Line является VBA зарезервированное слово, так что вы 'путайте компилятор. Измените имя вашего массива объектов, и оно работает просто отлично:

Dim lineArray() As clsLine 
'... 

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

Изменено имя и отлично работает! Спасибо за вашу помощь! – Nicolas