Вы можете определить свой собственный тип переменной с помощью кода, такого как:
Public T_Person as Type
name as string
dateOfBirth as date
....
email() as string (*)
....
End type
Затем вы можете объявить тип T_person в вашем коде с помощью:
Dim currentPerson as T_Person
currentPerson.name = myName
currentPerson.dateOfBirth = myDate
currentPerson.email(1) = myFirstEmail
....
(*) Я не помню деталей для объявления массивов в таких обстоятельствах. Возможно, вам придется определить длину массива при определении переменной. Пожалуйста, проверьте помощь.
Того же результата можно достичь, объявив модуль класса с именем, например, «Person». В этом модуле класса вы сможете не только следить за свойствами объекта (такими как name, dateOfBirth и т. Д.), Но также за событиями объекта (инициализация и удаление). Вы также сможете создавать методы для этого объекта. Ваш код будет выглядеть так:
Dim myPerson as Person
set myPerson = New Person
myPerson.name = myName
myPerson.dateOfBirth = myDate
if myPerson.age > 18 then (*)
'the guy is an adult'
myPerson.createAccount
Else
'the guy is not ...'
Endif
(*) Здесь age - это расчетная величина вашего объекта, доступная, когда dateOfBirth не равно NULL. Пожалуйста, Google "Модуль класса VBA", чтобы найти различные примеры для реализации модуля класса в VBA.
Теперь, если вы хотите управлять коллекцией похожих «объектов» (здесь, Persons), вам нужно будет создать модуль класса для вашей коллекции объектов (например, модуль класса «Persons») использовать объект "Коллекция", доступный в VBA. Затем вы закончите двумя различными классными модулями: Person (будет содержать данные о каждом человеке) и Persons (будет содержать коллекцию Person). После этого вы сможете получить такой код:
Public myPersons as Persons 'at the app level, 1 main collection'
myPersons.add .... 'adding a new person to your collection'
myPersons.count ... 'counting number of persons in myPersons'
Пожалуйста, загляните в "Объект коллекции VBA", чтобы найти примеры управления коллекциями в VBA. Проверьте мое предложение по коду, так как оно было написано на лету и без справочного файла VBA.
Решение «Класс» явно более мощное, но более сложное, чем «Тип». Сделайте это, если вам это нужно. Это определенно стоит боли!
PS: я не очень доволен своими именами, поскольку это может привести к очень запутанному коду при работе с коллекцией myPersons и экземпляром myPerson объекта Person. Я бы посоветовал вам найти более очевидный, например, «PersonCollection» и «Person», или даже «Individual»