Институт управления, бизнеса и права
Опубликован: 25.03.2009 | Доступ: свободный | Студентов: 7323 / 1525 | Оценка: 4.41 / 4.15 | Длительность: 14:33:00
Лекция 6:

Основы VBA: встроенные и пользовательские функции

< Лекция 5 || Лекция 6: 123 || Лекция 7 >

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

06-04-Пользовательские типы данных.docm - пример к п. 6.6.

Иногда возникает необходимость в работе с данными, имеющими особенную структуру. Например, какой тип должна иметь переменная, которая может хранить код пользователя, его ФИО, возраст, адрес, телефон, дату рождения? Очевидно, что встроенными типами данных тут не обойтись. Можно, конечно, представить себе строковую переменную, которая содержит все эти данные, записанные подряд, но работать с такой переменной будет очень неудобно. В подобных случаях на помощь приходят пользовательские типы данных. Для определения нового типа данных используется конструкция Type - End Type.

Рассмотрим пример. Создадим документ Microsoft Word, добавим с помощью редактора Visual Basic новый модуль и разместим в нем такой код (листинг 6.13.):

Type Worker ' начало объявления типа данных
    Usercode As Integer
    Name As String
    Phone As String
    BirthDate As Date
End Type
Public Sub WorkWithUser()
    Dim wrk_NewUser As Worker
    Dim wrk_TestUser As Worker
    Dim str_UserName As String
    wrk_NewUser.Usercode = 1
    wrk_NewUser.Name = "Петров Петр Петрович"
    wrk_NewUser.Phone = "8(928)8888888"
    wrk_NewUser.BirthDate = #8/12/1980#
    'Обмен данными между переменными
    'пользовательского типа
    'адекватен обычному обмену
    wrk_TestUser = wrk_NewUser
    'Присвоим строковой переменной
    'значение одной из частей
    'пользовательской переменной
    str_UserName = wrk_TestUser.Name
    MsgBox ("Имя пользователя: " + str_UserName)
End Sub
Листинг 6.13. Код модуля с объявлением пользовательского типа данных

Новый тип данных должен быть объявлен вне процедуры - на уровне модуля. Мы специально привели здесь, вместе с текстом объявления типа, процедуру, в которой используется этот тип. Как видите, внутри объявления типа (между Type и End Type ), находятся объявления переменных, а сразу после ключевого слова Type следует имя типа. Мы дали типу данных имя Worker, а это значит, что объявляя переменную в модуле, мы будем использовать это имя для указания ее типа данных. Имя нашего типа данных используется при объявлении переменной точно так же, как и имена встроенных типов - String, Byte и т.д. Мы объявили три переменные. wrk_NewUser типа Worker, wrk_TestUser того же типа и str_UserName - обычную строковую переменную.

После того, как переменная типа Worker объявлена, мы можем работать с ней. А именно, обращение к элементам переменной ведется через точку с использованием имен "внутренних" переменных типа. Сначала мы по очереди присваиваем каждой части переменной wrk_NewUser соответствующие значения. Далее мы присваиваем значение переменной wrk_NewUser переменной wrk_TestUser. Как видите, работа с пользовательскими переменными одинакового типа ни чем не отличается от работы с обычными переменными. Несмотря на сложную структуру переменной, обычный оператор присваивания отлично справляется с переносом значений из одной переменной в другую. Следующий этап нашей программы - извлечение значения одной из частей переменной типа Worker, а конкретно - имени пользователя, в строковую переменную str_UserName. После этого мы выводим переменную str_UserName в окне сообщения.

6.7. Константы

06-05-Константы.docm - пример к п. 6.7.

Константы очень похожи на переменные. Они имеют имена, которые строятся по тем же правилам, в них могут храниться различные значения и т.д. Главное отличие констант от переменных в том, что константы нельзя изменять в ходе выполнения программы. Это удобно в тех случаях, когда вы собираетесь много раз использовать в программе какое-то значение и хотите, чтобы оно гарантированно оставалось неизменным.

Для объявления констант используется ключевое слово Const. При объявлении константы нужно обязательно указать ее имя и присвоить ей нужное значение. При необходимости можно указать и тип константы. Вот как выглядит работа с константами в процедуре (листинг 5.24.):

Const str_Name As String = "Александр"
    Const int_Size As Double = 18000
    Dim num_NewSize As Double
    MsgBox ("Здравствуйте, " + str_Name)
    num_NewSize = int_Size * 2
Листинг 5.24. Работа с константами

Здесь мы объявили пару констант - одну строковую для хранения имени пользователя, вторую - типа Double. Строковую константу мы используем для построения строки вывода в операторе MsgBox, а числовую применяем для построения выражения, результат вычислении которого записывается в переменную num_NewSize.

В VBA имеется обширный набор встроенных констант. Они используются для работы с цветом (например, vbRed - красный и т.д.) для задания типов окон сообщений и во многих других случаях. Как правило, константы, допустимые в том или ином случае, можно найти в справочном материале, который появляется при наборе команд. Так же, подробные сведения о встроенных константах содержатся в справочной системе VBA.

6.8. Выводы

В этой лекции мы завершили обсуждение основ VBA - теперь вы можете писать простые программы. Но мы еще не разговаривали о более продвинутых возможностях программирования. О них - в следующей лекции.

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Евгений Ушаков
Евгений Ушаков

Добрый день! Поясните, пожалуйста, 3000 р. стоит документ об окончании курса. Если он не нужен, то можно учиться бесплатно?

Александр Новиков
Александр Новиков

Добрый день! Очень нужен справочник по объектам VBA c описание их методов и свойств.

Кто-нибудь знает, где можно приобрести?

(Он конечно есть в VBA - Object browser, но не очень удобный)