Создание переменных объектов (VBA) | Microsoft Learn
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
С объектной переменной можно обращаться точно так же, как объектом, к которому она относится. Вы можете задавать или возвращать свойства данного объекта или использовать любой из его методов.
Создание объектной переменной
Объявите эту объектную переменную.
Назначьте эту объектную переменную объекту.
Объявление объектной переменной
Используйте инструкцию 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
См. также
- Темы по основам Visual Basic
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
VBA Excel. Правильные имена переменных и процедур
Правила наименования переменных, констант, процедур и аргументов пользовательских функций в VBA Excel. Использование суффиксов в именах переменных.
Правильные имена в VBA Excel
Правила наименования переменных, констант, процедур и аргументов:
- Имя может состоять из букв, цифр и знака подчеркивания (_). Пробел и другие специальные символы не допускаются, кроме шести символов-суффиксов для переменных.
- Первым знаком имени должна быть буква. Длина имени ограничена 255 знаками.
- Не следует использовать имена, совпадающие с именами встроенных функций, операторов, методов, свойств и констант VBA Excel.
- Нельзя допускать повторения имен внутри одной области видимости (действия) переменных, например, внутри одной процедуры.
VBA Excel не чувствителен к регистру, но сохраняет заглавные буквы в именах. Если язык приложения русский, то для наименования переменных, констант, процедур и аргументов можно использовать слова на кириллице.
Примеры имен
Переменные: x, y, z, a1, a2, a3, summa, myRange, my_Currency
;
Подпрограммы: Primer1(), Raschet_Stazha(), SozdaniyeTablitsy()
;
Функции с аргументом: СуммаПрописью(x As Double) As String, ПоследнийДеньМесяца(x As Date) As Date
.
Области видимости переменных
Переменная | Область действия | Способ объявления |
---|---|---|
Локальная | отдельная процедура | внутри процедуры с помощью оператора Dim или Static |
Модульная | отдельный модуль | перед первой процедурой в модуле с помощью оператора Dim или Private |
Глобальная | все модули | перед первой процедурой в модуле с помощью оператора Public |
Подробнее о глобальных переменных читайте в статье: VBA Excel. Глобальная переменная.
Суффиксы в именах переменных
Переменные в VBA Excel могут быть объявлены с одним из следующих типов данных: Byte, Boolean, Integer, Long, Single, Double, Currency, Date, String (для строк переменной или фиксированной длины), Object или Variant. Если при объявлении переменной тип данных не указан, по умолчанию присваивается тип Variant.
Шесть типов данных имеют соответствующие им символы, которые можно использовать при объявлении переменных, добавляя их в конце имени как суффиксы. Переменная будет объявлена с соответствующим символу типом данных.
Символы, назначенные типам данных:
- % – Integer;
- & – Long;
- ! – Single;
- # – Double;
- @ – Currency;
- $ – String.
Примеры объявления переменных
Пример 1
Объявление переменных с указанием типа данных с помощью оператора Dim и суффиксов:
‘Объявление переменных без суффикса Dim myInteger as Integer, mySingle as Single, myCurrency as Currency ‘Объявление переменных с суффиксом Dim myInteger%, mySingle!, myCurrency@ |
Обе строки равнозначны. Во втором случае суффикс необходим только при объявлении переменных, далее, в тексте кода, его можно не использовать. С другой стороны, добавляя суффикс ко всем упоминаниям одной переменной, мы исключаем возможность случайно посчитать переменную с суффиксом и без него за разные переменные.
Пример 2
Объявление переменных без оператора Dim (Static, Public).
Если в модуле не используются операторы Option Explicit и Dim (Static, Public), то суффиксы являются единственным способом назначить переменной тип данных. То, что суффиксы работают и в этом случае, проверим на следующей процедуре:
Sub Primer() a$ = «привет» a = StrConv(a, 1) End Sub |
Указываем с помощью суффикса $, что переменная a является строковой, и ставим паузу на операторе End Sub. Запускаем процедуру:
На изображении видно, что переменной a присвоен тип данных String (окно Locals). Теперь запускаем ту же процедуру, но с переменной без суффикса:
Как и ожидалось, переменной a присвоен тип данных по умолчанию – Variant. Через косую черту указан тип данных, который VBA Excel идентифицировал у содержимого переменной a.
Пример 3
Объявление глобальной переменной и обращение к ней из других модулей.
Вариант 1
Объявление глобальной переменной myGlobalModule
в стандартном модуле Module1
:
Public myGlobalModule As Variant |
Обращение к переменной myGlobalModule
из модуля листа и книги:
Module1.myGlobalModule |
Вариант 2
Объявление глобальной переменной myGlobalSheet
в модуле листа Лист1
:
Public myGlobalSheet As Variant |
Обращение к переменной myGlobalSheet
из стандартного модуля и модуля книги:
Лист1. |
Вариант 3
Объявление глобальной переменной myGlobalBook
в модуле книги ЭтаКнига
:
Public myGlobalBook As Variant |
Обращение к переменной myGlobalBook
из стандартного модуля и модуля листа:
ThisWorkbook.myGlobalBook |
Фразы для контекстного поиска: имя переменной, имя процедуры, правильное имя, переменная с суффиксом.
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.
Объявление переменных в VBA: три ключа к успеху
Недавнее сообщение на форуме Excel содержало некоторый код VBA и спрашивало, почему код продолжает давать сбои. Первые несколько строк кода выглядели примерно так:
Dim Count
Dim List
Dim Address
Я не изучал его код, потому что то, как он объявлял свои переменные, делало его код трудным для понимания. На самом деле его проблема, вероятно, была вызвана тем, как он обращался со своими переменными.
Итак, давайте посмотрим, что он должен был сделать…
Use Option Explicit
По умолчанию Excel не требует объявления переменных. Тем не менее, вы должны немедленно изменить эту настройку.
В любой версии Excel нажмите клавиши ALT+F11, чтобы запустить редактор Visual Basic (VBE). Выберите Инструменты, Параметры. На вкладке «Редактор» диалогового окна «Параметры» убедитесь, что напротив «Требовать объявление переменной» стоит флажок.
После выбора OK вставьте новый модуль. Когда вы это сделаете, вы увидите Option Explicit в качестве первой строки модуля. Эта строка сообщает Excel, что все переменные должны быть объявлены.
Укажите тип переменной
Чтобы объявить переменную, введите Dim , имя переменной и тип переменной… примерно так…
Sub Foo() Dim Count как целое число Dim List As Range Dim Адрес как строка End Sub
…или это…
Sub Foo() Dim Count как целое число, список как диапазон, адрес как строка End Sub
Если вы не укажете тип переменной, как показано в первом примере вверху этого сообщения, VBA объявляет переменную как тип Variant. Variant может принимать любой тип переменной.
В редких случаях у вас будет веская причина для использования Варианта. Но примерно в 95% случаев вы должны использовать явные типы переменных. Одна из причин этого заключается в том, что ваш код будет работать быстрее. Но основная причина заключается в том, что вы уменьшите количество ошибок кодирования по крайней мере по двум причинам.
Первая причина, по которой вы уменьшите количество ошибок кодирования, заключается в том, что Excel применяет тип переменной, который вы указываете. Для иллюстрации, если вы запустите этот макрос…
Sub Foo() Dim Count как целое число, список как диапазон, адрес как строка Граф = "Смит" Конец суб
… Excel запускает диалоговое окно с ошибкой, потому что тип данных Integer не может содержать текст. (Тем не менее, Excel примет такое выражение, как…
Address=99
…потому что «99» может быть выражено в виде текста.)
Вторая причина, по которой всегда полезно явно объявлять типы переменных, заключается в том, что это помогает документировать ваши намерения при написании кода. Эта документация имеет решающее значение, если вы просматриваете свой код по прошествии нескольких недель. Знание того, предназначена ли переменная для хранения числа или текста, может значительно облегчить вам чтение старого кода, поиск ошибок и последующее продолжение написания кода.
По этой причине, когда вам нужно объявить переменную как Variant, делайте это явно, например: Вариант, а не как недосмотр.
Использовать венгерскую нотацию
Чарльз Симони, венгерский программист из Xerox PARC в 1970-х годах, который позже стал главным архитектором Microsoft, предложил, чтобы имена переменных использовали префикс, который сообщает что-то о переменной. Согласно Википедии, существует две версии того, что стало известно как венгерская нотация.
Вариант, который проще всего использовать и который я считаю наиболее полезным, заключается в использовании префикса для указания типа данных переменной. Здесь, например, я использую «n» для указания целого числа, «rng» для указания диапазона и «s» для указания строки.
Dim nCount как целое число Dim rngList как диапазон Dim sAddress As String
Многие программисты используют «int» или «i» для целого числа и «str» для строки. Это нормально. Пока ваши обозначения согласуются и понятны другим, не имеет значения, какие обозначения вы используете.
Совет VBA: объявление переменной | EnvisionCAD
Автор Род Винг.
Объявите все ваши переменные
VBA не требует от вас объявления каких-либо переменных, но настоятельно рекомендуется это сделать. Для необъявленных переменных устанавливается тип Variant . Не используйте тип данных Variant без крайней необходимости. Использование всех типов Variant может вызвать множество различных проблем в вашем коде, включая:
- Попытка передать переменные по ссылке на другой Sub , Function и т. д., которые требуют явно объявленных типов данных.
- Неправильная интерпретация значения
- VBA должен сделать наилучшее предположение, а иногда и неправильно
- Снижение общей производительности приложения
Как это остановить? Требуйте объявления переменных во всех ваших модулях VBA. В строке меню VBA выберите Tools -> Options для отображения следующего диалогового окна.
Установите флажок «Требовать объявление переменной» и нажмите кнопку OK . Когда этот параметр выбран, каждая новая форма, модуль и созданный класс будут начинаться с оператора Option Explicit . Чтобы обеспечить принудительное объявление переменных в существующих модулях, вам необходимо вручную разместить оператор Option Explicit вверху перед любыми процедурами.
Еще одна коварная ошибка, которая может возникнуть, если вы не используете Option Explicit , — это неправильный ввод имен переменных. Посмотрите на обычное имя переменной iCount в качестве примера. Для тех из нас, кто не является опытным наборщиком, это может быть легко ошибочно напечатано как iCoumt, iCout или какой-либо другой вариант. Не требуя объявления переменных, VBA позволит всем этим вариантам пройти через компиляцию. Попытка найти такую ошибку может занять очень много времени и разочаровать. С помощью Опция Явный оператор в каждом модуле кода VBA каждый раз автоматически перехватывает этот тип ошибки.
Правильное использование оператора Dim
Теперь, когда вам необходимо объявить все ваши переменные, убедитесь, что вы делаете это правильно. Общие рекомендации по кодированию VBA продвигают стандарт одной переменной на строку следующим образом:
Dim X As Double
Dim Y Как Двойной
Тусклый Z Как Двойной
Это повышает разборчивость и снижает вероятность неправильного декларирования.