Я пытаюсь узнать, как создать пользовательский тип данных, а затем использовать его с коллекцией. Я решил проблему другим способом, но это началось с отчета по расписанию, который я автоматизировал. Я изначально хотел иметь 2-мерный массив с различными типами данных. Когда я не мог этого сделать, некоторые исследования привели к идее сбора пользовательских типов данных. Однако примеры, которые я нашел, продолжают подталкивать меня к созданию класса. Мне это пока не нравится, и похоже, что это должно быть выполнимо. Вот вроде того, что я ищу (я начал с примера, я нашел на этом сайте):Excel VBA Коллекции и пользовательские типы данных
Option Explicit
'***** User defined type
Public Type MyType
MyInt As Integer
MyString As String
MyDoubleArr(2) As Double
End Type
Public ColThings As Collection
Sub CollectionTest()
Dim x As Integer
Dim vrecord As MyType
For x = 1 To 4
vrecord.MyInt = x
vrecord.MyString = "Matt"
vrecord.MyDoubleArr(0) = x + 5
vrecord.MyDoubleArr(1) = x + 6
vrecord.MyDoubleArr(2) = x + 7
ColThings.Add vrecord
Next x
For x = 1 To 4
Debug.Assert vrecord.MyInt & " - " & vrecord.MyString & " - " & vrecord.MyDoubleArr(0) & ", " & vrecord.MyDoubleArr(1) & ", " & vrecord.MyDoubleArr(0)
Next x
End Sub
Ошибки я получаю: Ошибка компиляции: «Только пользовательские типы, определенные в общественных местах объектные модули могут быть принудительно применены к варианту или из него или переданы в функции поздней связи »
Я не новичок с VBA, но я пытаюсь сделать следующий шаг.
Заранее спасибо.
Мое понимание (и, возможно, я ошибаюсь здесь), что вы не можете добавить определяемый пользователем тип в коллекцию, которая сама по себе является объектом. Я думаю, вам нужно будет создать класс, создать экземпляр, а затем добавить его в свою коллекцию. Возможно, вы сможете использовать массив вместо коллекции для хранения вашего UDT. – Soulfire
Непонятно, почему вы заканчиваете * vrecord *, а не * ColThings * в конце вашей процедуры. – Jeeped
Остановка * неправильная практика *; создайте класс, рекомендуемый рекомендациями, и начните * практиковать его правильно *. Практиковать свои плохие привычки так напряженно, рано, просто усложнит их позднее. –