Теперь, когда вы знакомы с типами данных, которые могут принимать переменные, можно приступать к созданию переменных. Для этого используется оператор Dim. Создание переменной называется объявлением переменной (declaring variable).
Оператор Dim имеет следующий синтаксис:
Dim имяпеременной As типданных
Здесь имяпеременной обозначает имя создаваемой переменной. Правила именования переменных совпадают с правилами задания имен процедурам, типданных - один из типов данных, приведенных в табл. 4.1.
Имя переменной должно начинаться с буквы и может содержать буквы, цифры и другие символы. Имя не может содержать пробелы, точки, запятые, восклицательные знаки (!) и символы @, &, $, #. Имя должно состоять не более чем из 255 символов.
Следующий пример продемонстрирует использование переменных в программировании на VBA. Мы продолжим написание процедуры, которая запрашивает имя пользователя, а затем использует его в окне сообщения. Выполните следующие действия.
Создайте новую процедуру под именем ЗнаюВашеИмя.
Введите код процедуры
Dim sName As String
sName = InputBox(“Введите ваше имя: “)
MsgBox “Привет, “ & sName
Полный код процедуры должен иметь следующий вид
Public Sub ЗнаюВашеИмя()
Dim sName As String
sName = InputBox(“Введите ваше имя: “)
MsgBox “Привет, “ & sName
End Sub
Отступы и пустые строки в тексте процедуры не обязательны, но желательны, так как облегчают чтение кода.
Нажмите клавишу <F5> для выполнения процедуры. На экране появится окно ввода (рис. 4.7).
Введите свое имя и нажмите клавишу <Enter>. Окно ввода закроется, и появится окно сообщения, содержащее ваше имя (рис. 4.8).
Щелкните на кнопке ОК. Вы вернетесь в редактор Visual Basic.
Рис. 4.7. Теперь переменная сохранит введенное имя
Рис. 4.8. Окно сообщения использует значение переменной, содержащей ваше имя
Вы не обязаны указывать тип данных в операторе Dim. Если не указан тип данных, то по умолчанию VBA применит тип Variant. Обычная реакция на такое сообщение: "Здорово! Пусть VBA делает всю работу - я могу не беспокоиться о типе данных". Большое заблуждение! Вы должны определять типы данных. И для этого существует много причин. Первая очевидная причина заключается в расточительстве ресурсов памяти данными типа Variant. Ни один тип данных не требует 16 или 22 байт для сохранения значений переменной - убедитесь в этом, просмотрев табл. 4.1. Другая, не совсем очевидная, но не менее важная, причина состоит в том, что VBA по-разному обрабатывает данные разных типов. Поэтому, не объявляя тип данных, вы можете получить результат, отличающийся от ожидаемого. Кроме того, в добавок к сказанному, время выполнения процедур VBA также зависит от объявленных (или необъявленных) типов данных. В качестве значимости объявления типов данных я часто привожу своим студентам следующий наглядный пример.
Создайте новую процедуру с названием ПримерПеременных.
Введите следующий код процедуры:
Dim StartTime
Dim EndTime
Dim i
Dim j
StartTime = Now()
For i = 1 To 5000000
j = i + 1
Next i
EndTime = Now()
MsgBox “Начало выполнения: “ & StartTime & _
vbNewLine & "Конец выполнения: “ & EndTime
Так как для переменных не объявлен тип данных, то все они по умолчанию имеют тип Variant.
Нажмите клавишу <F5> для выполнения процедуры. Выполнение этой процедуры займет несколько секунд. На моем компьютере эта процедура выполнялась не менее 4 секунд. Возможно, ваш компьютер более быстрый, чем мой, и выполнение процедуры занимает менее 4 секунд, в этом случае замените число 5000000 на 10000000. Запомните длительность выполнения процедуры.
Щелкните на кнопке ОК, чтобы закрыть окно сообщения.
Измените код процедуры следующим образом:
Dim StartTime As Date
Dim EndTime As Date
Dim i As Long
Dim j As Long
StartTime = Now()
For i = 1 To 5000000
j = i + 1
Next i
EndTime = Now()
MsgBox “Начало выполнения: “ & StartTime & _
vbNewLine & “Конец выполнения: “ & EndTime
Снова нажмите клавишу <F5> для выполнения процедуры. Сравните время выполнения процедуры теперь и ранее - оно уменьшилось по крайней мере в два раза.
Щелкните на кнопке ОК, чтобы закрыть окно сообщения.