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


Синтаксис объявления простых переменных


Объявление простых переменных имеет следующий синтаксис:

{Dim | Private | Public | Static }<имя переменной> [ As <имя типа>] [, <имя переменной> [ As <имя типа>]]…

Вначале идет имя оператора, а потом список объявлений переменных, где роль разделителя играет запятая. Каждое объявление связывает имя переменной с ее типом, заданным конструкцией As. Будьте внимательны, VBA неприятно отличается в этом вопросе от других языков программирования. Здесь, как обычно, одним оператором можно объявить произвольное число переменных, но следует в каждом объявлении указывать конструкцию As, иначе переменным без As будет приписан тип Variant. На наш взгляд, то, что одним As нельзя объявить список переменных одного типа, - некий синтаксический "прокол", приводящий, если не к серьезным ошибкам, то к излишнему и не предполагаемому употреблению типа Variant.

Заметьте, есть и приятное отклонение, - имена переменных в VBA можно задать, используя русский алфавит.

Приведем пример, где действуют модули Father и Mother, в каждом из которых объявлены глобальные (общие и закрытые) переменные. В каждом из модулей объявлены две процедуры, взаимно вызывающие друг друга. Отладочная печать в процедурах позволит проследить за изменением значений глобальных, локальных и статических переменных. Вот тексты модулей Father и Mother - объявления глобальных переменных и процедур:

'Option Explicit Public Fx As Byte, Fz As Integer Private Fy As Integer

Public Sub Start() 'Инициализация глобальных переменных Fx = 10: Fy = 11: Fz = 12 Mx = 20: My = 21: Mz = 22 Father1 End Sub

Public Sub Father1() Dim Fz As Byte 'Локальная переменная Fx = Fx + 2 Fy = Mx - 2 Fz = 1 Debug.Print "Father1: Fx=", Fx, " Fy =", Fy, "Fz =", Fz 'Вызов процедуры другого модуля Mother1 End Sub

Здесь мы приводим тексты модуля Mother:

'Option Explicit Public Mx As Byte Private My As Integer

Public Sub Mother1() 'Объявление статической переменной Static Count As Byte Count = Count + 1 Mx = Mx - 2: Fz = My + 2 Debug.Print "Mother: Статическая переменная Count =", Count 'Вызов процедуры Father другого модуля или заключительной - Finish If Fx < Mx Then Father1 Else Finish End Sub




Начало  Назад  Вперед