Как Public или Private переменная может быть объявлена только в разделе описаний переменных. С помощью же инструкции (команды, не выполняющей реальных действий) Dim она может быть объявлена и в тексте программы. Однако тогда ее другие модули уже использовать не смогут никак.
В области работы с типами данных Visual Basic for Applications имеет еще одну достаточно уникальную особенность. При написании программ на этом языке можно, как ни странно, даже вообще не объявлять специально переменные! Просто включите их в текст программы по мере надобности, и тогда Visual Basic for Applications автоматически присвоит им специальный тип для таких случаев — "Variant". В переменной, имеющей этот универсальный тип, может содержаться что угодно — хоть число, хоть текст. Однако следует помнить, что объем памяти, отводимый под переменную типа Variant, весьма велик, — значительно больше, чем под любой другой тип данных, поэтому определять все переменные как тип Variant не всегда рационально. Впрочем, учитывая большой объем оперативной памяти на современных компьютерах, потери памяти от использования Variant'а ощутимы крайне редко.
Тип Variant отличается еще и тем, что переменные с таким типом автоматически могут преобразовываться в любой нужный другой тип. Например, если переменная "х" имеет тип Variant и значение 2 (число), то после команды "x=Str(x)", которая преобразует число в строку, она уже будет иметь значение "2", то есть текстовая строка с цифрой "2". Такое преобразование было бы невозможно, если бы переменная "х" была бы объявлена как Integer — целое число.
Если вы не объявляете переменную заранее, а просто упоминаете ее в программе на Visual Basic for Application, то она объявляется "автоматически", и так же "автоматически" ей присваивается тип Variant. Подобная тактика написания программы может показаться неплохой, так как убыстряет этот процесс, однако, к сожалению, необъявленные переменные не могут быть использованы в других модулях или формах — при таком использовании их значения будут потеряны[228]
.Можно запретить для себя использование необъявленных переменных, вставив в начало модуля, в верх раздела описаний инструкцию "Option Explicit", и тогда программа остановится и перейдет в режим отладки, если вдруг наткнется на такую переменную.
Стоит быть внимательнее с типами данных, так как в некоторых случаях неправильное их использование может дать ошибку. Например, переменная с типом Integer не может превысить значение 32 767; если же надо использовать большие числа, то следует определить ее тип как Long, а если она может быть еще и дробной, то — Double.
В именах переменных Visual Basic for Applications распознаёт строчные и прописные буквы русского алфавита как разные символы. А вот заглавные и строчные латинские буквы считаются одинаковыми.
3. Процедуры и функции.
В принципе любая программа может быть написана в виде одного длинного блока текста. Однако такой код будет крайне нерациональным. Например, в программе необходимо несколько раз подсчитать сумму всех членов арифметической прогрессии для разных чисел. Можно, конечно, считать результат каждый раз по известной формуле, но это очень усложнит код. А если неизвестно, для какого количества чисел надо считать эту сумму (например, это определяет пользователь), то написание программы становится вообще невозможным! Поэтому в Visual Basic for Applications, как и в других современных языках программирования, есть понятие процедур и функций, иначе называемых подпрограммами.
Процедура — это программа, которая может быть вызвана из другой программы и при этом получить для дальнейшей обработки определенную информацию. Например, можно написать процедуру для вычисления суммы всех членов арифметической прогрессии и помещения результата в текст активного документа, и вызывать ее всякий раз, когда надо подсчитать такую сумму, передавая (то есть сообщая) процедуре число, для которого такая сумма считается. Функция же — это процедура, которая не только получает из другой программы какую-нибудь информацию, но и возвращает той программе какое-нибудь значение, которое может быть ею в дальнейшем использовано.
Можно сказать, что программа, не использующая вызов процедур, состоит из одной большой процедуры.
В Visual Basic for Applications любая процедура, получающая данные из другой программы, имеет следующий формат:
Sub "Название процедуры"("Получаемая переменная" As "Тип данных получаемой переменной")
"Текст процедуры"
End Sub
Получаемых переменных может быть несколько. Для каждой желательно указать ее тип, но это можно опустить.
Вызов процедуры происходит так же, как и вызов любой команды Visual Basic for Applications — путем указания ее названия и передаче ей соответствующих значений переменных:
Sub Main
Dim a As Integer
a = 1 uvelich a, 3
MsgBox a
End Sub
Sub uvelich(b As Integer, с As Integer)
b = b + с
End Sub