Use of Custom Data Types in VBA Use of Custom Data Types in VBA vba vba

Use of Custom Data Types in VBA


Sure you can:

Option Explicit'***** User defined typePublic Type MyType     MyInt As Integer     MyString As String     MyDoubleArr(2) As DoubleEnd Type'***** Testing MyType as single variablePublic Sub MyFirstSub()    Dim MyVar As MyType    MyVar.MyInt = 2    MyVar.MyString = "cool"    MyVar.MyDoubleArr(0) = 1    MyVar.MyDoubleArr(1) = 2    MyVar.MyDoubleArr(2) = 3    Debug.Print "MyVar: " & MyVar.MyInt & " " & MyVar.MyString & " " & MyVar.MyDoubleArr(0) & " " & MyVar.MyDoubleArr(1) & " " & MyVar.MyDoubleArr(2)End Sub'***** Testing MyType as an arrayPublic Sub MySecondSub()    Dim MyArr(2) As MyType    Dim i As Integer    MyArr(0).MyInt = 31    MyArr(0).MyString = "VBA"    MyArr(0).MyDoubleArr(0) = 1    MyArr(0).MyDoubleArr(1) = 2    MyArr(0).MyDoubleArr(2) = 3    MyArr(1).MyInt = 32    MyArr(1).MyString = "is"    MyArr(1).MyDoubleArr(0) = 11    MyArr(1).MyDoubleArr(1) = 22    MyArr(1).MyDoubleArr(2) = 33    MyArr(2).MyInt = 33    MyArr(2).MyString = "cool"    MyArr(2).MyDoubleArr(0) = 111    MyArr(2).MyDoubleArr(1) = 222    MyArr(2).MyDoubleArr(2) = 333    For i = LBound(MyArr) To UBound(MyArr)        Debug.Print "MyArr: " & MyArr(i).MyString & " " & MyArr(i).MyInt & " " & MyArr(i).MyDoubleArr(0) & " " & MyArr(i).MyDoubleArr(1) & " " & MyArr(i).MyDoubleArr(2)    NextEnd Sub


It looks like you want to define Truck as a Class with properties NumberOfAxles, AxleWeights & AxleSpacings.

This can be defined in a CLASS MODULE (here named clsTrucks)

Option ExplicitPrivate tID As StringPrivate tNumberOfAxles As DoublePrivate tAxleSpacings As DoublePublic Property Get truckID() As String    truckID = tIDEnd PropertyPublic Property Let truckID(value As String)    tID = valueEnd PropertyPublic Property Get truckNumberOfAxles() As Double    truckNumberOfAxles = tNumberOfAxlesEnd PropertyPublic Property Let truckNumberOfAxles(value As Double)    tNumberOfAxles = valueEnd PropertyPublic Property Get truckAxleSpacings() As Double    truckAxleSpacings = tAxleSpacingsEnd PropertyPublic Property Let truckAxleSpacings(value As Double)    tAxleSpacings = valueEnd Property

then in a MODULE the following defines a new truck and it's properties and adds it to a collection of trucks and then retrieves the collection.

Option ExplicitPublic TruckCollection As New CollectionSub DefineNewTruck()Dim tempTruck As clsTrucksDim i As Long    'Add 5 trucks    For i = 1 To 5        Set tempTruck = New clsTrucks        'Random data        tempTruck.truckID = "Truck" & i        tempTruck.truckAxleSpacings = 13.5 + i        tempTruck.truckNumberOfAxles = 20.5 + i        'tempTruck.truckID is the collection key        TruckCollection.Add tempTruck, tempTruck.truckID    Next i    'retrieve 5 trucks    For i = 1 To 5        'retrieve by collection index        Debug.Print TruckCollection(i).truckAxleSpacings        'retrieve by key        Debug.Print TruckCollection("Truck" & i).truckAxleSpacings    Next iEnd Sub

There are several ways of doing this so it really depends on how you intend to use the data as to whether an a class/collection is the best setup or arrays/dictionaries etc.