Объявление переменной в Visual Basic
Вы объявляете переменную, чтобы указать ее имя и характеристики. Оператор объявления для переменных — это оператор Dim. Его расположение и содержимое определяют характеристики переменной.
Правила именования переменных и рекомендации см. в разделе Объявленные имена элементов.
Уровни объявления
Локальные переменные и переменные-члены
Локальная переменная — это переменная, объявленная в процедуре. Переменная-член является членом типа Visual Basic; Он объявляется на уровне модуля, внутри класса, структуры или модуля, но не внутри какой-либо процедуры, внутренней для этого класса, структуры или модуля.
Общие переменные и переменные экземпляра
В классе или структуре категория переменной-члена зависит от того, является ли она общей. Если она объявлена с общим ключевое слово, она является общей переменной и существует в одной копии, общей для всех экземпляров класса или структуры.
В противном случае это переменная экземпляра, и для каждого экземпляра класса или структуры создается отдельная ее копия. Данная копия переменной экземпляра доступна только экземпляру класса или структуры, в которой она была создана. Он не зависит от копии переменной экземпляра в любом другом экземпляре класса или структуры.
Объявление типа данных
Предложение As в операторе объявления позволяет определить тип данных или тип объекта объявляемой переменной. Для переменной можно указать любой из следующих типов:
- Простейший тип данных, например Boolean , Long или . Decimal
- Составной тип данных, например массив или структура;
- Тип объекта или класс, определенный в приложении или в другом приложении
- Класс платформа .NET Framework, например Label илиTextBox
- Тип интерфейса, например IComparable или IDisposable
В одной инструкции можно объявить несколько переменных, не повторяя тип данных. В следующих инструкциях переменные , и объявляются как тип Integer , l и m как Long , и x как Single y . k j i
Dim i, j, k As Integer ' All three variables in the preceding statement are declared as Integer. Dim l, m As Long, x, y As Single ' In the preceding statement, l and m are Long, x and y are Single.
Дополнительные сведения о типах данных см. в разделе Типы данных. Дополнительные сведения об объектах см. в разделах Объекты и Классы и Программирование с помощью компонентов.
Вывод локального типа
Вывод типов используется для определения типов данных локальных переменных, объявленных без предложения As . Компилятор выводит тип переменной из типа выражения инициализации. Это позволяет объявлять переменные без явного указания типа. В следующем примере и num1 строго num2 типизированы как целые числа.
Public Sub inferenceExample() ' Using explicit typing. Dim num1 As Integer = 3 ' Using local type inference. Dim num2 = 3 End Sub
Если вы хотите использовать локальный вывод типа, Option Infer необходимо задать значение On . Дополнительные сведения см. в разделах Вывод локального типа и Оператор Option Infer.
Характеристики объявленных переменных
Время существования переменной — это период времени, в течение которого она доступна для использования. Как правило, переменная существует до тех пор, пока продолжает существовать элемент, объявляющий ее (например, процедура или класс). Если переменная не должна продолжать существовать после времени существования содержащего ее элемента, вам не нужно делать ничего особенного в объявлении. Если переменная должна продолжать существовать дольше, чем ее содержащий элемент, можно включить Static ключевое слово или Shared в ее инструкцию Dim . Дополнительные сведения см. в разделе Время существования в Visual Basic.
Область переменной — это набор всего кода, который может ссылаться на нее без указания ее имени. Область переменной определяется тем, где она объявлена. Код, расположенный в заданном регионе, может использовать переменные, определенные в этом регионе, без необходимости указывать их имена. Для получения дополнительной информации см. Scope in Visual Basic.
Уровень доступа переменной — это область кода, которая имеет разрешение на доступ к ней. Это определяется модификатором доступа (например , Public или Private), используемым в инструкции Dim . Дополнительные сведения см. в разделе Уровни доступа в Visual Basic.
См. также раздел
- Практическое руководство. Создание новой переменной
- Практическое руководство. Запись данных в переменную и их извлечение из переменной
- Типы данных
- Защищены
- Друг
- статически.
- Характеристики объявленных элементов
- Вывод локального типа
- Оператор Option Infer
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Использование переменных в под процедурах Excel в Visual Basic для приложений
В этой статье описано, как использовать переменные Microsoft Excel под процедурах в Microsoft Visual Basic для приложений.
Дополнительные сведения
Переменные в под процедуре
Мощной функцией языков программирования является возможность хранить данные в переменной, чтобы содержимое переменной можно было использовать или менять позже. В этом документе обсуждается следующее использование переменных в Visual Basic:
- Как объявляются переменные.
- Процедуры и проекты, которые могут использовать переменную.
- Время жизни переменной.
Объявление переменной в макросе
Самый простой способ объявить переменную в макросах — использовать отчет Dim. В следующей строке две переменные объявлялись как integers(integers).
Dim x As Integer, y As Integer
Если для переменных x и y заданы целые числа, вы указываете Visual Basic выделить достаточно памяти для переменной целого числа (по 2 на x и y) и что данные, хранимые в x или y, являются целым числом в период между -32768 и 32767.
ПРИМЕЧАНИЕ: Если вы объявляете несколько переменных с помощью одной выписки Dim, необходимо указать тип данных для каждой переменной.
Если не указать тип данных для каждой переменной, как в следующем коде Visual Basic, то переменная y будет настроена как переменная с типом данных типа integer. Переменная x будет иметь тип типа variant:
Dim x, y As Integer
Дополнительные сведения см. в приведенной ниже таблице Variant.
Чтобы выполнить проверку переменной, выполните следующие действия:
- Сохраните и закроите все открытые книги, а затем откройте новую книгу.
- Запустите редактор Visual Basic (нажмите ALT+F11).
- В меню Вставка выберите пункт Модуль.
- Введите следующий код:
Вы получите ошибку во время запуска, так как «ошибка» не является integer, и вы пытаетесь назначить это строковую величину для переменной x.
Сводка по типам данных
Это распространенные типы данных переменных:

тип данных Variant
Если не указать тип данных при объявлении переменной или вообще не объявлять переменную, Visual Basic автоматически определяет тип данных переменной типа переменной. Ниже следующую информацию о преимуществах переменных, объявленных в качестве этого типа данных:
- Переменные могут содержать строку, дату, время, boolean или числовую величину.
- Переменные могут автоматически преобразовывать содержащиеся в них значения.
Недостатком является то, что для переменных требуется не менее 16байт памяти. 16 bytes of memory can be significant in large procedures or in complex modules.
Чтобы узнать, как это работает в макросе Variable_Test, выполните следующие действия:
Измените код макроса Variable_Test на:
Sub Variable_Test() Dim x, y x = "string" y = 1.23 MsgBox "the value of x is " & x & _ Chr(13) & "the value of y is " & y End Sub
Запустите Variable_Test макрос.
Вы не получите сообщение об ошибке, так как вы можете назначить что-либо переменным x и y.
ПРИМЕЧАНИЕ: Вы также можете не использовать следующую строку, и макрос будет по-прежнему работать, так как переменные x и y будут рассматриваться как типы данных Variant:
Область действия переменной
Когда вы объявляете переменную, она может быть видна другими макросами в том же модуле, в других модулях или в других проектах. Такое доступность переменной в модулях называется областью действия. Область действия может быть трех типов: на уровне процедуры, на уровне частного модуля и на уровне общего модуля. Область действия зависит от того, как и где объявлять переменные или переменные.
Область на уровне процедуры
Переменная с областью на уровне процедуры не видна за пределами процедуры, в которой она объявлена. Если установить значение переменной, которая имеет область действия на уровне процедуры, ее содержимое не будет видно другими макросами.
Чтобы убедиться, что переменная с областью на уровне процедуры не видна за пределами процедуры, в которой она объявлена, выполните указанные ниже действия.
- Вставка нового модуля в проект.
- Введите в этот модуль оба макроса:
Sub Macro1() Dim x As Integer x = 10 MsgBox «x, as seen by Macro1 is » & x ‘next line runs Macro2 Macro2 End Sub Macro2() MsgBox «x, as seen by Macro2 is » & x End Sub - Запустите Макрос1, и вы получите следующее сообщение:
Макрос2 не отображает значение переменной x, так как переменная x является локальной для параметра Macro1.
Объем личных и общедоступных модулей
Вы можете определить переменные в разделе объявлений модуля (в верхней части модуля, над всеми под процедурами) и настроить область действия переменной с помощью открытой выписки, затемной или закрытой выписки. Если перед переменной поместить открытое заявление, переменная будет доступна всем макросам во всех модулях проекта. Если перед переменной поместить перед переменной утверждение Dim или Private, переменная будет доступна только макросам в модуле, в котором она объявлена.
Чтобы увидеть разницу между общедоступным заявлением и заявлением Dim, выполните следующие действия:
- Сохраните и закроите все открытые книги, а затем откройте новую книгу.
- Запустите редактор Visual Basic редактора.
- Вставка модуля в проект.
Type the following code into this module: Public x As Integer Sub Macro_1a() x = 10 MsgBox x Macro_1b End Sub Sub Macro_1b() x = x * 2 MsgBox x Macro2 End Sub
Public x As Integer
Dim x As Integer
ПРИМЕЧАНИЕ: Если вы хотите ограничить область действия переменной модулем, в котором она объявлена, используйте privatestatement вместо dim. Оба этих эффекта будут одинаковыми, но при использовании закрытой выписки область действия будет более четкой.
Срок жизни переменной
Время, в течение которого переменная сохраняет значение, называется сроком жизни. Значение переменной может изменяться в течение ее жизненного времени, но при этом сохраняется значение. Кроме того, если переменная теряет область действия, она теряет значение.
Инициализация значения переменной
При запуске макроса все переменные инициализируются со значением. Числовая переменная инициализирована до нуля, строка переменной длины — в нулевую строку («»), а строка фиксированной длины заполняется кодом ASCII 0. Переменные Variant инициализируются как пустые. Пустая переменная представлена нулем в числовом контексте и пустой строкой («») в строковом контексте.
Переменные уровня процедуры
Если переменная объявляется в макрос с помощью макроса Dim, значение переменной сохраняется до тех пор, пока работает макрос. Если этот макрос вызывает другие макрос, значение переменной сохраняется (но не доступно другим макросам), пока работают и другие макросы.
Чтобы продемонстрировать работу переменных на уровне процедуры, выполните указанные ниже действия.
- Вставка нового модуля в проект.
- В этом модуле введите оба макроса:
Вы получаете те же сообщения, что и в шагах 3–6, так как как макрос1 перестал работать на шаге 6, значение переменной x было потеряно. Таким образом, при повторном повторе макроса 1 в шаге 7 в первом сообщении будет показано значение x в качестве нуля (инициализированное значение).
Статическое ключевое слово
Если переменная на уровне процедуры объявлена с помощью статического ключевого слова, переменная сохраняет значение до сброса проекта. Таким образом, если у вас есть статическая переменная, то при следующем вызове процедуры статическая переменная инициализирована до последнего значения.
Чтобы узнать, как работает статическое ключевое слово, выполните следующие действия:
Change the code in Macro1 to: Sub Macro1() 'set x as a procedure level variable Static x As Integer MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub
Значения, которые отображаются в сообщениях, во второй раз отличаются, так как переменная x объявляется как статическая переменная, а значение переменной сохраняется после первого запуска макроса Macro1.
ПРИМЕЧАНИЕ: Если у вас есть переменная уровня модуля, ее время существования будет таким же, как если бы она была статической переменной на уровне процедуры.
Чтобы проверить срок жизни переменной уровня модуля, выполните указанные ниже действия.
Change the code in the module that contains Macro1 to the following: Dim x As Integer 'create a module-level variable Sub Macro1() MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub
Значения, которые отображаются в сообщениях, во второй раз отличаются, так как переменная x объявлена как статическая переменная и сохраняет значение после первого запуска макроса Macro1.
Сброс проектов для сброса переменных
Если вы хотите сбросить значение статической переменной или переменной на уровне модуля, нажмите кнопку Сброс на
Стандартная панель инструментов или нажмите кнопку Сброс в меню Выполнить.
Если вы сделаете это для проекта Macro1, а затем повторно запроизводили макрос1,значение переменной x инициализировано до нуля, и вы получите первое сообщение:
the initialized value of x is 0
Объявление переменных
При объявлении переменных обычно используется оператор Dim. Оператор объявления может быть помещен внутрь процедуры для создания переменной на уровне процедуры. Или он может быть помещен в начале модуля в разделе объявлений, чтобы создать переменную на уровне модуля.
В примере ниже создается переменная и указывается тип данных «String».
Dim strName As String
Если данный оператор отображается в процедуре, переменная strName может использоваться только в этой процедуре. Если же оператор отображается в разделе объявлений модуля, переменная strName доступна для всех процедур данного модуля, но недоступна для процедур других модулей проекта.
Чтобы предоставить доступ к переменной всем процедурам проекта, перед ней нужно поставить оператор Public, как показано в примере ниже:
Public strName As String
Дополнительные сведения об именовании переменных см. в статье Правила именования в Visual Basic.
Переменные могут быть объявлены одним из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String * length (для строк фиксированной длины), Object или Variant. Если тип данных не указан, по умолчанию присваивается тип данных Variant. Вы также можете создать определяемый пользователем тип с помощью оператора Type.
Вы можете объявить несколько переменных в одном операторе. Чтобы указать тип данных, необходимо задать тип данных для каждой переменной.
В приведенном ниже операторе переменные intX , intY и intZ объявлены типом Integer.
Dim intX As Integer, intY As Integer, intZ As Integer
В приведенном ниже операторе intX и intY объявлены как Variant и только intZ объявлен как тип Integer.
Dim intX, intY, intZ As Integer
Нет необходимости указывать тип данных переменной в операторе объявления. Если вы не укажите тип данных, переменной будет присвоен тип Variant.
Сокращение для объявления переменных x и y типом Integer в приведенном выше операторе
Dim intX%, intY%, intZ as Integer
Сокращение для типов: % -integer; & -long; @ -currency; # -double; ! – Single; $ – String
Оператор Public
Используйте оператор Public для объявления общих переменных на уровне модуля.
Public strName As String
Общие переменные могут использоваться в любой процедуре проекта. Если общая переменная объявлена в стандартном модуле или модуле класса, она может использоваться в любых проектах, содержащих ссылку на проект, в котором объявлена данная общая переменная.
Оператор Private
Используйте оператор Private для объявления частных переменных на уровне модуля.
Private MyName As String
Частные переменные могут использоваться только процедурами одного модуля.
На уровне модуля оператор Dim является эквивалентным оператору Private. Вы можете использовать оператор Private, чтобы упростить чтение и интерпретацию кода.
Оператор Static
Если для объявления переменной в процедуре используется оператор Static вместо оператора Dim, объявленная переменная сохраняет свое значение между вызовами в этой процедуре.
Оператор Option Explicit
В Visual Basic можно неявно объявить переменную, просто используя оператор присвоения значения. Все неявно объявленные переменные относятся к типу Variant. Для переменных типа Variant требуется больший объем памяти, чем для большинства других переменных. Приложение будет работать эффективнее, если переменные будут явно объявленными и им будет присвоен определенный тип данных. Явное объявление переменных снижает вероятность возникновения ошибок, вызванных конфликтом имен или опечатками.
Если вы не хотите, чтобы в Visual Basic были неявные объявления, то оператор Option Explicit должен стоять в модуле перед всеми процедурами. Этот оператор требует явного объявления всех переменных модуля. Если модуль содержит оператор Option Explicit, то при обнаружении необъявленной ранее переменной или опечатки в ее имени Visual Basic выдаст ошибку времени компиляции.
В программной среде Visual Basic имеется возможность задавать параметр, который будет автоматически включать оператор Option Explicit во все новые модули. Справочная информация по изменению параметров среды Visual Basic предоставлена в документации приложения. Обратите внимание, что данный параметр не меняет уже написанный код.
Статические и динамические массивы нужно объявлять в явном виде.
Объявление объектной переменной для автоматизации
При использовании приложения для управления объектами другого приложения необходимо указать ссылку на библиотеку типов этого другого приложения. Когда ссылка указана, можно объявлять объектные переменные в соответствии с наиболее подходящими для них типами. Например, если вы указываете ссылку на библиотеку типов Microsoft Excel при работе в Microsoft Word, то можете объявить переменную типа Worksheet внутри Word, чтобы она представляла объект Worksheet приложения Excel.
При использовании другого приложения для управления объектами Microsoft Access, как правило, можно объявлять объектные переменные согласно наиболее подходящим для них типам. Вы можете также использовать ключевое слово New для автоматического создания нового экземпляра объекта. Однако может возникнуть необходимость указать, что объект принадлежит Microsoft Access. Например, при объявлении объектной переменной, представляющей форму Access внутри Visual Basic, необходимо сделать различимыми объект Form приложения Access и объект Form приложения Visual Basic. Для этого следует включать имя библиотеки типов в объявление переменной, как показано в примере ниже:
Dim frmOrders As New Access.Form
Некоторые приложения не распознают отдельные объектные типы Access. Даже если в этих приложениях указана ссылка на библиотеку типов Access, все объектные переменные Access необходимо объявлять с типом Object. Также невозможно использовать ключевое слово New для создания нового экземпляра объекта.
В примере ниже показано, как объявлять переменную, представляющую экземпляр объекта Application Access в приложении, которое не распознает объектные типы Access. Затем приложение создает экземпляр объекта Application.
Dim appAccess As Object Set appAccess = CreateObject("Access.Application")
В документации приложения предоставлена информация о поддерживаемом им синтаксисе.
См. также
- Сводка типов данных
- Сводка по ключевым словам для переменных и констант
- Темы по основам Visual Basic
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Создание переменных объекта
С объектной переменной можно обращаться точно так же, как объектом, к которому она относится. Вы можете задавать или возвращать свойства данного объекта или использовать любой из его методов.
Создание объектной переменной
- Объявите эту объектную переменную.
- Назначьте эту объектную переменную объекту.
Объявление объектной переменной
Используйте инструкцию Dim или одну из других инструкций объявления (Public, Private или Static), чтобы объявить переменную объекта. Переменная, ссылающаяся на объект, должна быть Variant, Object или объект определенного типа. Например, следующие объявления являются допустимыми:
' Declare MyObject as Variant data type. Dim MyObject ' Declare MyObject as Object data type. Dim MyObject As Object ' Declare MyObject as Font type. Dim MyObject As Font
Если вы используете объектную переменную, предварительно не объявив ее, типом данных объектной переменной по умолчанию является Variant.
Объявить объектную переменную с типом данных Object можно в случае, когда конкретный тип объекта неизвестен вплоть до запуска процедуры. Используйте тип данных Object для создания универсальной ссылки на любой объект.
Если конкретный тип объекта вам известен, следует объявлять объектную переменную как тип данного объекта. Например, если приложение содержит тип объекта Sample, можно объявить переменную объекта для этого объекта с помощью любой из следующих инструкций:
Dim MyObject As Object ' Declared as generic object. Dim MyObject As Sample ' Declared only as Sample object.
Объявление конкретных типов объектов обеспечивает автоматическую проверку типов, ускорение выполнения кода и улучшенную удобочитаемость.
Назначение объектной переменной объекту
Используйте инструкцию Set для назначения объекта переменной объекта. Можно назначить выражение объекта или Nothing. Например, допустимы следующие назначения переменных объекта.
Set MyObject = YourObject ' Assign object reference. Set MyObject = Nothing ' Discontinue association.
Объявление переменной объекта можно объединить с присвоением ей объекта с помощью ключевого словаNew с оператором Set. Например:
Set MyObject = New Object ' Create and Assign
Задание для объектной переменной значения Nothing прерывает связь этой объектной переменной с конкретным объектом. Это предотвращает случайное изменение объекта в результате изменения соответствующей переменной. Переменная объекта всегда имеет значение Nothing после закрытия связанного объекта, поэтому можно проверить, указывает ли переменная объекта на допустимый объект. Например:
If Not MyObject Is Nothing Then ' Variable refers to valid object. . . . End If
Конечно, этот тест никогда не может с абсолютной уверенностью определить, закрыл ли пользователь приложение, содержащее объект, на который ссылается переменная объекта.
Ссылка на текущий экземпляр объекта
Используйте ключевое слово Me для ссылки на текущий экземпляр объекта, в котором выполняется код. Все процедуры, связанные с текущим объектом, имею доступ к объекту, на который ссылаются с использованием Me. Использование ключевого слова Me особенно полезно при передаче информации о текущем экземпляре объекта процедуре в другом модуле. Например, предположим, что имеется следующая процедура в модуле
Sub ChangeObjectColor(MyObjectName As Object) MyObjectName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256) End Sub
Можно вызвать процедуру и передать текущий экземпляр объекта в качестве аргумента с помощью следующей инструкции:
ChangeObjectColor Me
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Обратная связь
Отправить и просмотреть отзыв по