Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Пользовательские типы данных (оператор Type)

    Создание пользовательских типов данных в VBA Excel. Оператор Type, его описание и параметры. Создание массива «одномерных массивов» с пользовательскими данными.

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

    Пользовательский тип данных в VBA Excel представляет из себя набор элементов, каждому из которых пользователем присваивается свой тип данных. Другими словами, пользовательский тип данных — это набор данных разного типа, который может быть присвоен одной переменной.

    Если простую переменную (не массив) объявить с пользовательским типом данных, она будет представлять из себя «одномерный массив»* с элементами разных типов данных, определенных пользователем.

    Если с пользовательским типом данных объявить переменную массива, она будет представлять из себя массив «одномерных массивов»* пользовательских данных.

    * Выражение «одномерный массив» взято в кавычки, так как фактически это не массив, а набор пользовательских данных, но для практического применения это не имеет значения.

    Синтаксис и параметры оператора Type

    Синтаксис оператора Type

    Пользовательский тип данных в VBA Excel может быть объявлен с ключевым словом Public или Private, которое явно укажет зону его видимости. Если ключевое слово опущено, конструкция с оператором Type по умолчанию объявляется с зоной видимости Public.

    Параметры оператора Type

    Параметр Описание
    Name Имя пользовательского типа данных, по которому этот тип данных будет присваиваться переменным.
    Element Наименование отдельного элемента пользовательского типа данных.
    Tip Тип данных отдельного элемента (стандартный тип VBA).

    Применение пользовательских типов данных

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

    Объявление пользовательского типа данных

    Объявление пользовательского типа данных (конструкция с оператором Type) размещается в самом начале модуля в разделе Declarations.

    Пример 1

    В этом примере:

    • Domik — имя, по которому этот тип данных будет присваиваться переменным;
    • naimenovaniye — наименование домика для животных;
    • obyem_m3 — объем домика в куб. метрах;
    • material — материал, из которого сделан домик;
    • kolichestvo — количество домиков на складе.

    Заполнение данными массива

    Обычно в качестве контейнеров для пользовательских типов данных в VBA Excel используются массивы. В простую переменную можно уместить только один набор пользовательских данных, а в массив — сколько нужно. В следующем примере мы заполним трехэлементный массив тремя наборами пользовательских данных.

    Если представить набор пользовательских данных как «одномерный массив», то таким образом мы создадим массив «одномерных массивов» с пользовательскими данными.

    Пример 2

    Обращение к пользовательским данным в массиве

    Для обращения в коде VBA Excel к пользовательским данным в массиве используется та же конструкция, что и при записи: указывается элемент массива и через точку наименование элемента пользовательских данных.

    Пример 3

    Для наглядной демонстрации вставьте строки кода Примера 3 перед строкой End Sub Примера 2.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    8 комментариев для “VBA Excel. Пользовательские типы данных (оператор Type)”

    1. Здравствуйте!
      А как в третьем примере найти в массиве номер элемента,
      материал которого — металл?
      Спасибо!

      1. Евгений

    2. Здравствуйте!
      Несколько связанных вопросов:
      можно ли например верхний элемент задавать переменной?

      можно ли сделать что-то подобное для массива?
      можно ли определять размерность переменной в середине кода?

      Спасибо!

      1. Евгений

        Привет!
        На все вопросы ответ – нельзя.

      2. Евгений

        Погорячился я с ответом. В последнем параграфе этой статьи смотрите пример переопределения размерности массива с помощью переменных.

      3. 1. Можно, только если использовать динамический массив

        Для увеличения размерности массива, не удаляя из него данные

        2. Изменять тип переменной после объявления уже нельзя. Для этой цели можно использовать тип Variant, который может принимать значения разных типов.

    3. такой вопрос: нужно последовательно перебрать данные в массиве пользовательского типа (как в примере выше Domik) для перебора желательно использовать for each…
      пытаюсь

      пишет что нельзя использовать пользовательский тип. как обойти эту проблему?

      1. Евгений

        Здравствуйте, Юрий!
        Цитата с сайта разработчиков: «Оператор For…Each…Next нельзя использовать с массивом пользовательского типа, поскольку тип Variant не может содержать пользовательские типы».

    Обсуждение закрыто.