RSS

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

В статье «Типы данных в Visual Basic (VBA)» мы познакомились с основными простейшими типами в VBA. Но средства VBA нам позволяют создавать свои составные (пользовательские) типы данных, основанные на простейших типах. Для чего это нужно? Например, нам необходимо описать некоторые объекты по следующим параметрам: Длина, Ширина, Глубина, Цвет, Материал и т.д. Это можно сделать двумя способами:
1 — На каждый параметр создать переменную определенного типа
2 — Создать свой пользовательский (составной) тип, содержащий все эти параметры и описать переменную этого типа.
Пока не совсем понятно, что я имел ввиду. Сейчас на примере разберем.

Что нам дает описание собственного типа?

Удобство! В одной переменной вы можете передать множество параметров разного типа. Такой подход значительно упростит код и сделает его легко-читаемым, да и с объектами легче работать.

Как описать свой тип данных в VBA?

В VBA для описания своего типа предусмотрена конструкция:

[Private | Public] Type НазваниеТипа
Элемент1 As Тип
Элемент2 As Тип
….

End Type

где:
Prvate/Public —
определяет область видимости нашего типа (private — виден только в текущем модуле, public — виден во всех модулях)
Type — ключевое слово, указывающее на описание нового типа «НазваниеТипа«
Элемент1,2…n — собственно поля простых типов
End Type — конец описания типа.

На примере рассмотрим описание вышеупомянутого составного типа, который содержит несколько элементов описывающих объект.

Описать тип можно в любом модуле, но если таких составных типов в проекте будет не один 10-ок, то для простоты рекомендую выносить их описание в отдельный модуль. Итак, создадим наш тип MyObject с элементами:
Длина, Ширина, Глубина — типа Single
Цвет, Материал — типа String.

Option Explicit
Public Type MyObject
  dl as single
   sh as single
   gl as single
   cvet as string
   mat as string
End Type

Sub TestMyType ()
dim obj as MyObject
obj.dl = 35.5
obj.sh = 15
obj.gl=3
obj.cvet = «Черный»
obj.mat = «Резина»

‘ для более удобного обращения к полям объекта obj
‘воспользуемся конструкцией with … end with
with obj
  msgbox «Параметры объекта:» & chr(13) & «Длина — «& .dl & chr(13) _
           & «Ширина — «& .sh & chr(13) & «Глубина — » & .gl & chr(13) _
           & «Цвет — » & .cvet & chr(13) & «Материал — » & .mat
end with

end sub

Обратите внимание что когда Вы ставите точку после названия переменной obj у вас выпадает список всех доступных полей.

Вы можете так же составлять новые типы из созданных уже ранее типов т.е.

Type MyObject
  dl as single
   sh as single
   gl as single
   cvet as string
   mat as string
End Type

Public Type MyType
  ID as long
  Myobj as MyObject
‘ …. 
End Type

Обращаться к полю MyType.MyObject.pole1

На этом все! До скорого…