Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Область видимости переменных, констант, подпрограмм и функцийСодержание книги
Поиск на нашем сайте Любая переменная, константа, подпрограмма или функция VBA обладает областью видимости (scope), в которой возможен доступ к данной переменной, константе, подпрограмме или функции. Допустим, что мы определили переменную Var1 в процедуре Proc1, а затем написали вторую процедуру – Proc2, где также хотим использовать эту переменную. Если Var1 описана внутри Proc1 ключевым словом Dim, она считается переменной «уровня процедуры». Это означает, что область её видимости ограничена подпрограммой или функцией, в которой она объявлена. Использовать Var1 в Proc2 без расширения видимости переменной нельзя. Рассмотрим другой пример. В модуле Модуль1 содержится функция Функция1. Мы хотим вызвать её из программы, помещенный в другой модуль, например Модуль2. Если Функция1 описана с помощью ключевого слова Function (см. раздел «Функции»), она считается функцией «уровня проекта». То есть она доступна везде в пределах содержащей её рабочей книги – мы вправе вызывать её из любой программы любого модуля книги. Чтобы предотвратить вызов функции из программ других модулей, достаточно ограничить область её видимости. А теперь рассмотрим вопросы видимости отдельно для всех, уже описанных нами, основных элементов VBA – переменных, констант, подпрограмм и функций. Область видимости переменных Хотя обычно термин «область видимости» применяют, говоря о доступе к переменной из различных фрагментов приложения VBA, он также имеет отношение к «времени жизни» переменной, то есть к промежутку времени, в течение которого переменная сохраняет присвоенное ей значение. В VBA переменные имеют три уровня видимости: § процедуры; § модуля; § проекта (или общий уровень). Эти уровни в равной степени относятся и к одиночным переменным, и к массивам. Помните также, что по умолчанию определения пользовательских типов, помещенные в разделе описания модуля VBA, имеют область видимости на уровне проекта. Это означает, что после определения пользовательского типа Вы можете объявлять переменные этого типа в любой программе проекта. Переменные уровня процедуры Переменная доступна на уровне процедуры, если она объявлена внутри процедуры ключевым словом Dim. Например, в ПеременныеУровняПроцедуры у переменной Var1 область видимости – на уровне процедуры. Sub ПеременныеУровняПроцедуры() Dim Var1 As Integer Var1 =55 MsgBox Var1 End Sub Любая попытка использовать переменную Var1 вне этой процедуры приведет к ошибке. Попробуем вставить в тот же модуль другую программу и попытаемся обратиться в ней к переменной Var1. Давайте вставим перед последней строкой ПеременныеУровняПроцедуры вызов этой второй программы: Sub ПеременныеУровняПроцедуры () Dim Var1 As Integer Var1 =55 MsgBox Var1 DisplayMessage End Sub Sub DisplayMessage() MsgBox Var1 End Sub При запуске программы ПеременныеУровняПроцедуры объявляется переменная Var1, ей присваивается значение 55, которое затем выводится в информационном окне. После закрытия окна ПеременныеУровняПроцедуры вызывает другую программу, DisplayMessage, которая также должна отобразить в информационном окне значение переменной Var1. Однако в этом случае окно оказывается пустым (напомним, в первый раз в нем отобразилось число 55): поскольку Varlобъявлена на уровне процедуры. За пределами ПеременныеУровняПроцедуры (в которой она описана) её значение не определено. Когда VBA встречает Varl в программе DisplayMessage, он считает, что имеет дело с необъявленной пустой переменной, присваивает ей тип Variant и выводит в информационном окне пустую строку. Видимость на уровне процедуры проиллюстрирована на Рис. 7‑1.
Рис. 7‑1 Переменная Var1, объявленная на уровне процедуры, доступна только в программе Чтобы исходное значение Varl (55) было доступно в DisplayMessage, придется либо передать его в качестве аргумента, либо расширить область видимости этой переменной, как описано в следующем разделе. Переменные уровня модуля Переменную уровня модуля можно использовать в любой подпрограмме или функции того модуля, где эта переменная была определена. Чтобы сделать переменную доступной на уровне модуля, объявите её перед любыми подпрограммами и функциями, как показано в примере: Dim Var2 As String Sub ПеременнаяУровняМодуля() Var2 = "Привет!" DisplayMessage2 End Sub Sub DisplayMessage2() MsgBox Var2 End Sub DisplayMessage2успешно используется переменная Var2, значение которой было в ПеременнаяУровняМодуля, поскольку Var2 была описана на уровне модуля и сохраняется в подпрограммах. Доступ на уровне модуля проиллюстрирован на.
Рис. 7‑2.Переменная Var2, объявленная на уровне модуля, Чтобы сделать любую переменную доступной на уровне модуля, объявите ее с ключевым словом Private: Private Var2 As String Переменные, описанные в начале модуля, доступны в нем по умолчанию, в их определениях слово Private не обязательно. Рассмотрим следующий случай. Пусть переменная Var3 определена в модуле Модуль1, и там же ей присвоено значение. Предположим, мы хотим получить доступ к этой переменной в подпрограмме из модуля Модуль2. Поскольку переменная Var3 доступна лишь в модуле, содержащем ее описание, чтобы использовать Var3 в других модулях, надо расширить область ее видимости, как описано в следующем разделе. Переменные уровня проекта Переменная уровня проекта (или общего уровня) доступна и сохраняет свое значение в любом модуле проекта, содержащего ее описание. Чтобы сделать переменную доступной на уровне проекта, объявите ее с ключевым словом Public в разделе описаний любого модуля проекта, перед любыми подпрограммами и функциями. Мы написали две процедуры и разместили их в различных модулях. Одна из них присваивает значение переменной уровня проекта, а другая выводит его в информационном окне: Public Var3 As String Sub ПрисвоениеЗначения() Var3 = "Эта переменная была объявлена в Модуль2." End Sub
Sub ПеременнаяУровняПроекта() ПрисвоениеЗначения MsgBox Var3 End Sub В этом примере программа ПеременнаяУровняПроекта вызывает из другого модуля программу ПрисвоениеЗначения, присваивающую значение переменной уровня проекта Var3. Затем значение этой переменной в ПеременнаяУровняПроекта выводится на экран. Доступ на уровне проекта проиллюстрирован на Рис. 7‑3 и Рис. 7‑4.
Рис. 7‑3. Объявление переменной на уровне проекта
Рис. 7‑4. ПеременнаяVar3, объявленная на уровне проекта, доступна Сохраняемые переменные Вы уже знаете, что при объявлении переменных используются ключевые слова Dim и Public. Для описания же переменных на уровне процедуры применяется еще одно ключевое слово — Static. Переменная, объявленная знакомым нам способом, с помощью инструкции Dim, прекращает свое существование после завершения программы, в которой она была описана, то есть после слов End Sub или End Function. Определив переменную как Static (сохраняемую), мы продлим время ее жизни до завершения работы всех программ, включая и ту, в которой переменная была описана. Sub СтатическаяПеременная() СтатическаяНестатическая СтатическаяНестатическая End Sub Sub СтатическаяНестатическая() Static Var1 As String Dim Var2 As String If Varl = "" Then Var1 = "Var1: Статическая переменная" Var2 = "Var2: Нестатическая переменная " End If MsgBox Varl MsgBox Var2 End Sub В программе СтатическаяПеременная дважды вызывается программа СтатическаяНестатическая. При первом вызове определяется сохраняемая переменная Varl и обычная переменная Var2. Затем в инструкции If переменная Varl сравнивается с пустой строкой. Результат положительный, поскольку пока этой переменной значение не присвоено. В инструкции If переменным Varl и Var2 присваиваются строковые значения, которые перед завершением работы СтатическаяНестатическая отображаются в информационных окнах. Затем управление возвращается в СтатическаяПеременная, и СтатическаяНестатическая вызывается второй раз. Переменная Varl, объявленная как Static, сохранила свое значение, поэтому второе сравнение приводит к отрицательному результату. Повторное присвоение значений Varl и Var2 не происходит. Когда переменная Varl выводится на экран, в окне отображено ее прежнее значение. Переменная же Var2 при повторном вызове СтатическаяНестатическая была создана заново, поэтому в ее окне мы увидим пустую строку.
|
||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 102; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.006 с.) |