Основы программирования на VBA

Типы данных

Типы данных относятся к самым фундаментальным понятиям любого языка программирования. Тип данных определяет множество допустимых значений, которое может принимать указанная переменная.
В VBA имеются следующие основные типы данных:

 

Описание переменных
Описание типа каждой переменной делает программу надежнее и, кроме того, убыстряет ее работу, т. к. VBA не требуется тратить время на распознавание типа неописанной переменной при каждом обращении к ней.
Синтаксис:
Dim [WithEvents] ИмяПеременной[([Индексы])] [As [New] Тип]
[,[WithEvents] ИмяПеременной[([Индексы])] [As [New] Тип]] . . .
Аргументы:

Переменные, описанные с помощью ключевого слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре.
Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом integer.
Dim N As Integer
Инструкция Dim предназначена также для описания объектного типа переменных. Далее приводится описание переменной для нового экземпляра рабочего листа.
DimX As New Worksheet
Если при описании объектной переменной не используется ключевое слово New, то для использования объекта, на который ссылается переменная, существующий объект должен быть присвоен переменной с помощью инструкции Set.
Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefTnn, по умолчанию переменная получает тип variant. Для обязательного описания всех переменных надо поместить в начале модуля инструкцию option Explicit. Использование этой инструкции полезно при отладке программ, т. к. она позволяет легче отслеживать возможную путаницу в именах при наборе программы.
Допустимые имена
В VBA пользователь определяет имена переменных, функций, процедур, типов, постоянных и других объектов. Вводимые пользователем имена должны отражать суть обозначаемого объекта так, чтобы делать программу легко читаемой. В VBA имеются следующие ограничения на имена:

  1. Длина имени не должна превышать 255 символов.
  2. Имя не может содержать точек, пробелов и следующих символов: %, .&,
    !, #, @, $.
  3. Имя может содержать любую комбинацию букв, цифр и символов, начинающуюся с буквы.
  4. Имена должны быть уникальны внутри области, в которой они определены.
  5. Не следует использовать имена, совпадающие с ключевыми словами VBA и именами встроенных функций и процедур.

Хотя регистр букв (верхний или нижний) в имени не имеет значения, умелое использование его может существенно облегчить понимание содержательной стороны переменной. Например, вместо плоских и невыразительных имен
процентная
ставка х_начзнач
предпочтительнее использовать следующие имена, которые легче воспринимаются, благодаря выделению некоторых символов, входящих в них, разумным использованием верхнего регистра
ПроцентнаяСтавка
х_НачЗнач
Инструкция DefТип
Инструкция DefTиn (вместо тип в имени инструкции фигурируют буквы, обозначающие конкретный тип данных) используется на уровне модуля для задания типа данных по умолчанию для переменных, аргументов, передаваемых в процедуры, и значений, возвращаемых процедурами Function и Property Get, имена которых начинаются с соответствующих символов.
Синтаксис:

Аргумент ДиапазонБукв имеет следующий синтаксис:
Буква1[-Буква2]
Аргументы Буква1 и Буква2 указывают границы диапазона имен, для которых задается тип данных по умолчанию.
В следующем примере инструкция устанавливает, что все переменные с именами, начинающимися с букв из диапазона от А до Q, имеют строковый тип:
DefStr A-Q
Инструкция Def Тип действует только на модуль, в котором она используется.
При указании диапазона букв обычно определяется тип данных по умолчанию для переменных, которые начинаются с первых 128 символов набора. Однако при указании диапазона A—Z задается тип данных по умолчанию для всех переменных, включая те, что начинаются с международных символов из расширенной части набора (128-255).
Еще одним способом задания типа переменной по умолчанию является включение в конец имени специального символа, устанавливающего тип переменной. Допустимо использование следующих специальных символов для установки типов

 
Массивы
Как и в других языках программирования, в VBA вы можете использовать массивы. Примеры объявления массивов приведены ниже.
Dim B(3, 3) As Single
Dim A(12) As Integer
Первая строка объявляет двумерный массив 3x3 (матрицу), состоящий из действительных чисел. Вторая строка объявляет одномерный массив (вектор) из 12 целых чисел, причем по умолчанию первый элемент массива будет А(0), а последний А(11). В этом случае говорят, что о — базовый индеке. Можно изменить базовый индекс, написав в начале листа модуля инструкцию Option Base1. После этого индексы массивов А и В будут начинаться с единицы. Другим способом изменения базового индекса является использование ключевого слова то при объявлении массива:
Dim B(l То 3, 1 То 3) As Single
Dim A(l To 12) As Integer
Массив в программе определяется поэлементно. Например,
Dim B(l To 2, 1 То 2) As Single
B(l,l)=2
В(1,2)=4
В(2,1)=1
В(1,2)=6
Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа variant. Например,
Dim A As Variant
А = Аггау(10,20,30)
В = А(2)
Динамические массивы
Иногда в процессе выполнения программы требуется изменять размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не надо указывать размерность, например:
Dim R() As Single
В программе следует вычислить необходимый размер массива и связать его с некоторой переменной, например n, затем изменить размер динамического массива с помощью оператора ReDim.
Синтаксис:
ReDim [Preserve] ИмяПеременной(Индексы) [As Тип] [, ИмяПеременной(Индексы) [As Тип]] ...
Аргументы:

Например, установим границы массивы R:
ReDim R(l To 10)
Допустимо повторное использование инструкции ReDim для изменения числа элементов и размерностей массива.
Функции и процедуры для работы с массивами
При работе с массивами бывает полезно применять следующие функции и процедуры.

 
Константы
Константы, в о.тличие от переменных, не могут изменять свои значения. Использование констант делает программы легче читаемыми и позволяет проще вносить исправления — отпадает необходимость многократно исправлять значения по тексту программы, т. к. достаточно ввести новое значение при определении константы.
Синтаксис:
[Public | Private] Const ИмяКонстанты [As Тип] = Выражение
Аргументы:

Пример:
Const ПроцентнаяСтавка As Single = 0.2
Const Фирма = "OOO Бескрайние просторы"
Тип данных, определенный пользователем
Наряду с массивами, представляющими нумерованный набор элементов одного типа, существует еще один способ создания структурного типа — тип, определенный пользователем, или в привычной терминологии для программистов запись. Запись — это совокупность нескольких элементов, каждый из которых может иметь свой тип. Элемент записи называется полем. Запись является частным случаем класса, в котором не определены свойства и методы.
Синтаксис:
[Private | Public] Type ИмяПеременной ИмяЭлемента [([Индексы])] Аs тип [ИмяЭлемента [([Индексы])] As тип]
End Type
Аргументы:

В данном примере инструкция туре используется для определения типа данных (только на уровне модуля). При появлении в модуле класса инструкции туре должно предшествовать ключевое слово Private. '
' Тип, определенный пользователем
Туре Студент '
' Элементы типа данных
'
Фамилия As String * 20 Имя As String * 20
Отчество As String * 20 НомерЗачетки As Integer
Группа As String * 10 Курс As Long
ДатаРождения As Date
End Type
Sub ВводДанных()
' Описание переменной Экономист
'
Dim Экономист As Студент
' Присвоение значений элементам переменной Экономист
With Экономист
.НомерЗачетки = 12003
.Группа = "Менеджмент"
End With
End Sub
Можно создавать массив, содержащий элементы собственного типа. Например, следующий массив состоит из сведений о 20 студентах.
Dim СтудентЭкономист(1 to 20) As Студент
' Присваивает значения элементам первой компоненты массива
CтудентЭкономист(1). Фамилия = "Промокашкин"
CтудентЭкономист(1).
Имя = "Евстегней" СтудентЭкономист(1).
Отчество = "Поликарпович"
Операции VBA
В программах на VBA можно использовать стандартный набор операций над данными. Имеются три основных типа операций:

  • Математические, выполняются над числами, и их результатом являются числа
  • Отношения, применяются не только к числам, и их результатом являются логические значения, например х>у
  • Логические, используются в логических выражениях и их результатом являются логические значения, например Not x And у

Приведем операции VBA указанных и дополнительных категорий. Математические операции.

Операции отношения.

Логические операции.

Другие операции.

 
Приоритеты операций
VBA выполняет операции в соответствии с их приоритетами, что обеспечивает однозначность в трактовании значений выражений. Приведем приоритеты выполнения операций.

 

Встроенные функции VBA
В VBA имеется большой набор встроенных функций и процедур, использование которых существенно упрощает программирование. Эти функции можно разделить на следующие основные категории:

  • Математические функции
  • Функции проверки типов
  • Функции преобразования форматов
  • Функции обработки строк
  • Функции времени и даты

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

 
Функции проверки типов
Функции проверки типов проверяют, является ли переменная выражением специфицированного типа.

 
Функции преобразования форматов
Преобразование строки в число и обратно осуществляют следующими функциями.

В качестве допустимого десятичного разделителя функция str воспринимает только точку. При наличии другого десятичного разделителя (например, запятой) для преобразования чисел в строки следует использовать функцию cstr, описанную ниже.
Чтобы представить числовое значение как дату, время, денежное значение или в специальном формате, следует использовать функцию Format.

При построении пользовательского числового формата возможно использование следующих символов.

Кроме функций vai и str в VBA имеются следующие функции преобразования типов выражений из данного в указанный.

 
Функции обработки строк
В VBA имеются следующие функции обработки строковых выражений.

Функции времени и даты
В VBA имеются следующие, функции времени и даты.

 
Функции выбора
Кроме перечисленных выше основных категорий функций в VBA имеются также функции выбора, которые дублируют некоторые аспекты операторов условного перехода. Ниже приведены эти функции.

 

Функции, возвращающие строки
Некоторые функции имеют по две версии, одна из которых возвращает тип данных variant а другая — тип данных string. Первая версия является более удобной, так как при этом для значений типа variant преобразование типов данных выполняется автоматически. Вторая версия, возвращающая тип string, использует меньше памяти и может быть полезна в следующих случаях:

  • Для экономии памяти, если в программе имеется очень много переменных
  • При выполнении прямой записи данных в файлы с произвольным доступом

Перечисленные ниже функции возвращают значения типа String, если к их имени добавляется символ доллара ($). Эти функции имеют такое же применение и синтаксис, как и их эквиваленты без символа доллара, возвращающие тип Variant.

 
Встроенные диалоговые окна
В проектах VBA часто встречаются две разновидности диалоговых окон: окна сообщений и окна ввода. Они встроены в VBA, и если их возможностей достаточно, то можно обойтись без проектирования диалоговых окон. Окно сообщений (MsgBox) выводит простейшие сообщения для пользователя, а окно ввода (InpuBox) обеспечивает ввод информации.

Таблица 11.1. Значения аргумента buttons процедуры MsgBox, определяющие отображаемые кнопки в диалоговом окне

Таблица 11.2. Значения аргумента buttons процедуры м$двох, определяющие отображаемые информационные значки в диалоговом окне

Таблица 11.3. Значения аргумента buttons процедуры MsgBox, определяющие
основную кнопку в диалоговом окне

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

Приведем пример использования окон сообщений. В результате действия приведенной ниже процедуры Тестокон появится диалоговое окно пример окна ввода с полем ввода ( 1). Следуя приглашению в этом диалоговом окне, введем в поле ввода имя, например Андрей. Нажмем кнопку ок.
На экране отобразится диалоговое окно пример окна сообщения с текстом приветствия ( 2). Если пользователь не введет имя в поле ввода диалогового окна пример окна ввода или нажмет кнопку Отмена, то компьютер выразит свое неудовлетворение действиями пользователя отображением диалогового окна Еще один пример окна сообщения ( 3).
Пример окна сообщения
Private Sub ТестОкон()
'
' Описание переменной
Dim ИмяКлиента As String
'
' Ввод имени пользователя
'
ИмяКлиента = InputBox("Введите ваше имя", "Пример окна ввода")
' Реакция программы на ввод имени пользователя
If, ИмяКлиента <> "" Then
MsgBox "Привет, " & ИмяКлиента, vbInformation,
"Пример окна сообщения"
Else
MsgBox "Невежа, ты забыл ввести свое имя " & ИмяКлиента,
vbExclamation, "Еще один пример окна сообщения"
End If
End Sub
Приведем еще один пример использования диалоговых окон. Этот пример позволяет отобразить на экране диалоговое окно с тремя кнопками да, нет и отмена и информационным знаком. Клавише <Enter> назначена функция кнопки да. По нажатию одной из этих кнопок на экране отображается сообщение, подтверждающее нажатие.
Sub ТриКнопки()
Dim Сообщение As String
Dim Кнопка As Integer
'
' В переменной Сообщение задается структура диалогового окна
'
Сообщение = vbYesNoCancel + vbQuestion + vbDefaultButtonl
'
' В переменную Кнопка вводится целое число, возвращаемое MsgBox
' при нажатии кнопки
'
Кнопка= MsgBox("Выбираете Да, Нет или Отмена?", Сообщение, "Еще пример")
'
' В зависимости от значения переменной Кнопка,
' на экране отображается соответствующее сообщение '
Select Case Кнопка Case vbYes
MsgBox "Выбрали Да", vblnformation, "Еще пример" Case vbNo
MsgBox "Выбрали Нет", vblnformation, "Еще пример" Case vbCancel
MsgBox "Выбрали Отмена", vblnformation, "Еще пример"
End Select
End Sub

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика