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.