Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

Важность объявления переменных

Можно привести много аргументов в пользу объявления переменных. Перечислим лишь некоторые из них.

  • Объявление переменных поможет избежать самого распространенного типа ошибок – ошибок, связанных с неправильным написанием имен переменных, например, вместо идентификатора wbkVar в команде может быть записано wkbVar.

  • Если переменная объявлена, Visual Basic проверяет, используется ли правильный тип данных в операциях с этой переменной.

  • Объявление переменных исключает преобразование значений переменных из типа Variant в другой, которое происходит при вычислении выражений.

  • Использование переменных различных типов уменьшает память, занимаемую переменными, и сокращает время выполняемых вычислений, благодаря чему программы становятся более эффективными.

  • Объявление переменных позволяет создавать переменные, которые можно использовать в нескольких процедурах или модулях (модульные и глобальные переменные). Можно определять также переменные, сохраняющие свои значения после выхода из процедуры.

Чтобы избежать использования переменных без объявления, можно поместить в область Declarations каждого модуля инструкцию Option Explicit. Тогда при обращении к переменной, не объявленной ранее, возникнет сообщение об ошибке компиляции.

Рис. 3.1. Ошибка компиляции – переменная неопределенна

Чтобы принудительно следовать стратегии объявления переменных, включите опцию Require Variable Declaration (Требовать описание переменных) в окне команды Tools-Options (см. рис. 2.6) и тогда инструкция Option Explicit будет автоматически вставляться во все модули и процедурные листы проекта.

Область видимости переменных

Все переменные обладают областью определения (областью видимости) и временем жизни. Область видимости переменной – это те процедуры, в которых переменная может быть использована, т.е. в которых доступно значение переменной.

Переменную можно объявить на уровне процедуры или на уровне модуля. Переменные, объявленные на уровне процедуры, доступны только внутри этой процедуры. Это локальные переменные (Local) и область их видимости – конкретная процедура. Вне этой процедуры значение переменной непредсказуемо и использование переменной приводит к ошибке выполнения программы.

Область видимости переменных

Уровень объявления

Оператор объявления

Переменная

Область видимости

Процедура

Dim, Private

Локальная

Процедура

Уровень модуля

Dim, Private

Модульная

Все процедуры модуля

Уровень модуля в стандартном модуле (Module)

Public

Глобальная

Все процедуры проекта

Уровень модуля на процедурном листе формы или объекта MS Excel

Public

Модульная

Все процедуры процедурного листа, в котором переменная объявлена

Переменные, объявленные явно в области описаний (Declaratives) при помощи оператора Private или Dim, являются модульными и известны во всех процедурах того модуля или процедурного листа, в котором они объявлены. На модульном уровне не имеет значения, какой использован оператор, но предпочтительнее использовать Private, чтобы отличить объявление модульных переменных от объявления локальных переменных.

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

Важно

  • Модульные и глобальные переменные должны быть описаны явно.

  • Локальные переменные с одинаковыми идентификаторами, определенные в разных процедурах, являются разными переменными и использование подобной переменной в разных процедурах в предположении, что это одна и та же переменная, приводит к ошибке выполнения программы.

  • Можно использовать одинаковые идентификаторы для объявления локальных, модульных и глобальных переменных. Если имена переменных конфликтуют, иными словами в процедуре определена локальная переменная, идентификатор которой совпадает с идентификатором модульной или глобальной переменной, то внутри процедуры используется локальная переменная.

Например, если определена переменная Temp на уровне процедуры и на модульном уровне, то внутри процедуры будет использоваться локальная переменная, а значение модульной переменной Temp не будет принято во внимание.

Пример

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

Dim PR_A As integer ‘переменная определена во всех процедурах модуля

Private PR_B As Integer ’переменная определена во всех процедурах модуля

Public PU_C as integer ’переменная определена во всех процедурах проекта

Private Sub A()

Dim L_D as integer ‘переменная определена только в процедуре A

L_D=1 ‘значение L_D равно 1

Pr_A=L_D+1 ‘значение Pr_A равно 2

PR_B=L_D+2 ‘значение PR_B равно 3

PU_C=L_D+3 ‘значение PU_C равно 4

B 'вызов процедуры B

PR_B=PR_B+PR_A ‘значение PR_B равно 5

End Sub

Private Sub B()

L_D=L_D+1 ‘значение L_D равно 1. Переменная определена только в процедуре B,

'поэтому ее начальное значение равно 0.

PU_C=PU_C+1 ‘значение PU_C равно 5

End Sub