JXB
JXB

Reputation: 29

How to set 2 arguments on Let function in a class in vba (for excel)?

I am creating a Class in vba (for excel) to process blocks of data. After some manipulation of a text file I end up with blocks of data (variable asdatablock() ) which I want to process in a For Loop

I created my own Class called ClDataBlock from which I can get key data by a simple call of the property required. 1st pass seems to work and I am now trying to expand my Let function to 2 argument but it’s not working. How do I specify the 2nd argument?

Dim TheDataBlock As New ClDataBlock
For i = 0 to UBound(asdatablock)
    asDataBlockLine = Split(asdatablock(i), vbLf)   ‘ split block into line
    TheDataBlock.LineToProcess = asDataBlockLine(5) ‘allocate line to process by the class
    Dvariable1 = TheDataBlock.TheVariable1
    ‘and so on for the key variables needed base don the class properties defined
Next i

In the Class Module the Let function takes 2 arguments

Public Property Let LineToProcess(stheline As String, sdataneeded As String)

code extract of what I am looking at - 'in the class module

Dim pdMass As Double
Private pthelineprocessed As String

Public Property Let LineToProcess(stheline As String, sdataneeded As String)

 pthelineprocessed = DeleteSpaces(Replace(stheline, vbLf, ""))

    Dim aslinedatafield() As String

    Select Case sdataneeded

    'THIS IS AN EXTRACT FROM THE FUNCTION
    'THERE ARE AS NUMBER OF CASES WHICH ARE DEALT WITH

    Case Is = "MA"
            aslinedatafield() = Split(pthelineprocessed, " ")
            pdbMass = CDbl(aslinedatafield(2))

    End select

End function

Public Property Get TheMass() As Double
    TheMass = pdMass
End Property

'in the "main" module

Dim TheDataBlock As New ClDataBlock
For i = 0 to UBound(asdatablock)
 TheDataBlock.LineToProcess = asDataBlockLines(5) 'Need to pass argument "MA" as well
 dmass = TheDataBlock.TheMass
'and so on for all the data to be extracted
 Next i

Upvotes: 0

Views: 561

Answers (1)

Brian M Stafford
Brian M Stafford

Reputation: 8868

When a Property has 2 or more arguments, the last argument is what is getting assigned. In other words, the syntax is like this:

TheDataBlock.LineToProcess("MA") = asDataBlockLine(5)

This means you need to change the signature of your property:

Public Property Let LineToProcess(sdataneeded As String, stheline As String)

Upvotes: 0

Related Questions