Использование пользовательских типов данных в VBA

Я пытаюсь создать пользовательский тип данных в VBA для Excel. Назовем этот тип данных «грузовик». Каждый грузовик имеет следующие атрибуты:

NumberOfAxles (this is an integer) AxleWeights (this is an array of doubles) AxleSpacings (this is an array of doubles) 

Могу ли я создать много экземпляров типа данных «грузовик» (грузовик (1), грузовик (2) … и т. Д.) И прочитать / записать перечисленные выше атрибуты в этот экземпляр?

Пример:

 Truck(1).NumberOfAxles = 2 Truck(1).AxleWeights(1) = 15.0 Truck(1).AxleWeights(2) = 30.0 Truck(1).AxleSpacings(1) = 8.0 Truck(2).NumberOfAxles = 3 Truck(2).AxleWeights(1) = 8.0 Truck(2).AxleWeights(2) = 10.0 Truck(2).AxleWeights(3) = 12.0 Truck(2).AxleSpacings(1) = 20.0 Truck(2).AxleSpacings(2) = 4.0 

и так далее. Синтаксис выше, скорее всего, неправильный, я просто хотел продемонстрировать структуру, в которой мне нужно придумать.

Все, что я пытаюсь записать данные в структуру данных и называть их необходимыми, такими как

 Truck(i).NumberOfAxles Truck(i).AxleWeights(j) Truck(i).AxleSpacings(j) 

Большое спасибо!

Что вы можете:

 Option Explicit '***** User defined type Public Type MyType MyInt As Integer MyString As String MyDoubleArr(2) As Double End Type '***** Testing MyType as single variable Public 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 array Public 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) Next End Sub 

Похоже, вы хотите определить Truck как Class со свойствами NumberOfAxles, AxleWeights & AxleSpacings.

Это можно определить в модуле CLASS (здесь называется clsTrucks )

 Option Explicit Private tID As String Private tNumberOfAxles As Double Private tAxleSpacings As Double Public Property Get truckID() As String truckID = tID End Property Public Property Let truckID(value As String) tID = value End Property Public Property Get truckNumberOfAxles() As Double truckNumberOfAxles = tNumberOfAxles End Property Public Property Let truckNumberOfAxles(value As Double) tNumberOfAxles = value End Property Public Property Get truckAxleSpacings() As Double truckAxleSpacings = tAxleSpacings End Property Public Property Let truckAxleSpacings(value As Double) tAxleSpacings = value End Property 

то в МОДУЛЕЕ определяется новый грузовик и его свойства и добавляется в коллекцию грузовиков, а затем извлекается коллекция.

 Option Explicit Public TruckCollection As New Collection Sub DefineNewTruck() Dim tempTruck As clsTrucks Dim 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 i End Sub 

Существует несколько способов сделать это, так что это действительно зависит от того, как вы собираетесь использовать данные о том, является ли класс / коллекция лучшими настройками или массивами / словарями и т. Д.

Interesting Posts

VBA, который скопирует и вставляет последнюю запись в первую пустую строку

Макроспиновая формула

Чтение файла ods openoffice с помощью CreateOpenXmlReader в C #

Вывод из списка Excel (многосегмент) в виде столбца или диапазона

Excel – Отменить обновление соединения через VBA

Excel – возврат значений из диапазона, начинающегося с первого непустого значения

Копирование диапазона ячеек из закрытой книги в электронную почту Outlook, которая уже содержит тело с использованием VBA?

Count Если с несколькими критериями и уникальными значениями

VBA – Excel добавляет каждую активную строку с именем файла

Generic User для строки подключения Excel

Проблемы с возвращаемым типом VBA VARIANT и 64-разрядной сборкой надстройки C ++ Excel

значения в двойных кавычках, не работающих в экспорте, в excel

Мастер импорта студии управления MS Внешняя таблица не находится в ожидаемом формате. Excel (XLSX)

Excel VBA загрузка файла с URL-адреса

Максимальное количество условных правил форматирования в Excel 2016?

Давайте будем гением компьютера.