какие способы описания переменных поддерживает язык vba
Переменные в Visual Basic
При выполнении вычислений с Visual Basic часто приходится сохранять значения. Например, может потребоваться вычислить несколько значений, сравнить их и (в зависимости от результата сравнения) выполнить с ними различные операции. Чтобы сравнить значения, их необходимо сохранить.
Использование
Visual Basic, как и большинство языков программирования, использует переменные для хранения значений. Переменная имеет имя (слово, которое используется для ссылки на содержащееся в переменной значение). Переменная также имеет тип данных (который определяет, какие данные можно хранить в переменной). Переменная может представлять массив, если она должна хранить индексированный набор близко связанных элементов данных.
Вывод локального типа позволяет объявлять переменные без явного указания типа данных. Вместо этого компилятор выводит тип переменной из типа инициализирующего выражения. Дополнительные сведения см. в разделах Вывод локального типа и Оператор Option Infer.
Назначение значений
Для выполнения вычислений и присвоения результата переменной используются операторы присваивания, как показано в следующем примере.
Переменные и свойства
Как и переменная, свойство соответствует значению, к которому можно получить доступ. Но оно является более сложным, чем переменная. Свойство использует блоки кода, определяющие способ задания и получения его значения. Подробнее см. в разделе Различия между свойствами и переменными в Visual Basic.
Объявление переменной в Visual Basic
Переменная объявляется для указания ее имени и характеристик. Оператор объявления для переменных является оператором Dim. Его расположение и содержимое определяют характеристики переменной.
Правила именования переменных и рекомендации см. в разделе Имена объявленных элементов.
Уровни объявления
Локальные и переменные членов
Локальная переменная — это одна из процедур, объявленная в процедуре. переменная-член является членом типа Visual Basic; Он объявляется на уровне модуля, внутри класса, структуры или модуля, но не внутри какой-либо процедуры, внутренней для этого класса, структуры или модуля.
Переменные Shared и instance
В противном случае это переменная экземпляра, и ее отдельная копия создается для каждого экземпляра класса или структуры. Данная копия переменной экземпляра доступна только для экземпляра класса или структуры, в которой он был создан. Он не зависит от копии переменной экземпляра в любом другом экземпляре класса или структуры.
Объявление типа данных
Предложение as в операторе объявления позволяет определить тип данных или тип объекта объявляемой переменной. Для переменной можно указать любой из следующих типов:
Составной тип данных, например массив или структура
Тип объекта или класс, определенный либо в приложении, либо в другом приложении
Тип интерфейса, например IComparable или IDisposable
Дополнительные сведения о типах данных см. в разделе типы данных. Дополнительные сведения об объектах см. в разделе объекты и классы и программирование с помощью компонентов.
Вывод локального типа
Определение типа используется для определения типов данных локальных переменных, объявленных без As предложения. Компилятор выводит тип переменной из типа выражения инициализации. Это позволяет объявлять переменные без явного указания типа. В следующем примере оба типа num1 и num2 строго типизированы как целые числа.
Характеристики объявленных переменных
Время существования переменной — это период времени, в течение которого она доступна для использования. Как правило, переменная существует, пока не будет существовать элемент, объявляющий ее (например, процедуру или класс). Если переменная не должна продолжаться за пределами времени существования содержащего его элемента, не нужно делать ничего особенного в объявлении. Если переменная должна продолжать существовать дольше, чем содержащая ее элемент, можно включить Static Shared ключевое слово или в Dim инструкцию. Дополнительные сведения см. в разделе время существования в Visual Basic.
Областью действия переменной является набор всего кода, который может ссылаться на него без уточнения его имени. Область переменной определяется тем, где она объявлена. Код, расположенный в данном регионе, может использовать переменные, определенные в этом регионе, без уточнения их имен. Для получения дополнительной информации см. Scope in Visual Basic.
Уровень доступа переменной — это область кода, имеющая разрешение на доступ к нему. Это определяется модификатором доступа (например, открытым или закрытым), который используется в Dim инструкции. Дополнительные сведения см. в разделе уровни доступа в Visual Basic.
Основы VBA: синтаксис, переменные, типы данных
5.1. Синтаксические описания
Синтаксис языка программирования — это правила написания программ.
Рассмотрим пример — возьмем из справочной системы описание команды. Мы пока не будем вдаваться в смысл ключевых слов (перед нами — описание оператора цикла ), приведенных здесь, остановимся на основных частях описания.
Элементы, которые допускают альтернативный выбор, разделяются знаком » | «. Например, такая запись : » one | two » обозначает » one или two».
Теперь рассмотрим понятие переменной — важнейшее понятие в любом языке программирования.
5.2. Переменные
При именовании переменных старайтесь пользоваться латинскими буквами. Иначе возможны проблемы при работе ваших программ на различных версиях Office.
Для этого добавим в документ Microsoft Word кнопку с именем cmd_Variables и надписью » Имя пользователя «. Зададим ее обработчику Click следующий код (листинг 5.1.):
На рис. 5.1. вы можете видеть это окно.
Обратите внимание на то, что мы не заключили имя переменной в кавычки. Иначе в окне сообщения вывелось бы лишь имя переменной ( txt_Name ), но не хранимый в ней текст.
5.3. Типы данных в VBA
Префикс имени переменной | Пояснения |
---|---|
s, str | Строковая переменная |
n, num | Числовая переменная (существует множество числовых типов данных, название каждого из которых может быть использовано в качестве префикса, например, int для Integer, dbl для Double и т.д.) |
b, bool | Логическая переменная |
O, obj | Объектная переменная |
Объявление переменных
При объявлении переменных обычно используется оператор Dim. Оператор объявления может быть помещен внутрь процедуры для создания переменной на уровне процедуры. Или он может быть помещен в начале модуля в разделе объявлений, чтобы создать переменную на уровне модуля.
В примере ниже создается переменная и указывается тип данных «String».
Если данный оператор отображается в процедуре, переменная strName может использоваться только в этой процедуре. Если же оператор отображается в разделе объявлений модуля, переменная strName доступна для всех процедур данного модуля, но недоступна для процедур других модулей проекта.
Чтобы предоставить доступ к переменной всем процедурам проекта, перед ней нужно поставить оператор Public, как показано в примере ниже:
Дополнительные сведения об именовании переменных см. в статье Правила именования в Visual Basic.
Переменные могут быть объявлены одним из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String * length (для строк фиксированной длины), Object или Variant. Если тип данных не указан, по умолчанию присваивается тип Variant. Вы также можете создать определяемый пользователем тип с помощью оператора Type.
Вы можете объявить несколько переменных в одном операторе. Чтобы указать тип данных, необходимо задать тип данных для каждой переменной.
В приведенном ниже операторе intX и intY объявлены как Variant и только intZ объявлен как тип Integer.
Нет необходимости указывать тип данных переменной в операторе объявления. Если вы не укажите тип данных, переменной будет присвоен тип Variant.
Сокращение для объявления переменных x и y типом Integer в приведенном выше операторе
Оператор Public
Оператор Public используется для объявления общих переменных на уровне модуля.
Общие переменные могут использоваться в любой процедуре проекта. Если общая переменная объявлена в стандартном модуле или модуле класса, она может использоваться в любых проектах, содержащих ссылку на проект, в котором объявлена данная общая переменная.
Оператор Private
Оператор Private используется для объявления частных переменных на уровне модуля.
Частные переменные могут использоваться только процедурами одного модуля.
На уровне модуля оператор 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. Для этого следует включать имя библиотеки типов в объявление переменной, как показано в примере ниже:
Некоторые приложения не распознают отдельные объектные типы Access. Даже если в этих приложениях указана ссылка на библиотеку типов Access, все объектные переменные Access необходимо объявлять с типом Object. Также невозможно использовать ключевое слово New для создания нового экземпляра объекта.
В примере ниже показано, как объявлять переменную, представляющую экземпляр объекта Application Access в приложении, которое не распознает объектные типы Access. Затем приложение создает экземпляр объекта Application.
В документации приложения предоставлена информация о поддерживаемом им синтаксисе.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Синтаксис VBA Переменные, константы и типы данных
3.3 Переменные, константы и типы данных
Переменные VBA, объявление переменных, Option Explicit, правила именования, типы данных VBA, исходные значения переменных
Переменные — контейнеры для хранения изменяемых данных. Без них не обходится практически ни одна программа. Для простоты переменную можно сравнить с номерком в гардеробе — вы сдаете в «гардероб» какие-то данные, в ответ вам выдается номерок. Когда вам опять потребовались эти данные, вы «предъявляете номерок» и получаете их. Пример работы с переменными в VBA может выглядеть так:
Dim nMyAge As Integer
nMyAge = nMyAge + 10
Перед работой с переменной настоятельно рекомендуется ее объявить. Объявление переменной в нашем примере выглядит так:
Dim nMyAge As Integer
Как расшифровать эту строку:
Dim — это область видимости переменной. В VBA предусмотрено 4 ключевых слова для определения области видимости переменных:
Static nVar1 As Integer
Если нет никаких особых требований, то есть смысл всегда выбирать область видимости Dim.
Второе слово в нашем объявление (nMyAge) — это идентификатор (проще говоря, имя) переменной. Правила выбора имен в VBA едины для многих элементов (переменные, константы, функции и процедуры и т.п.). Имя:
При создании программ VBA настоятельно рекомендуется определиться с правилами, по которым будут присваиваться имена объектам — соглашение об именовании. Чаще всего используется так называемое венгерское соглашение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):
Многие программисты используют такой подход для обозначения констант и сейчас (но использование ключевого слова Const теперь обязательно — об этом будет рассказано в следующем разделе).
Третья часть нашего объявления — As Integer — это указание на тип данных нашей переменной. Тип данных определяет, данные какого вида можно будет хранить в нашей переменной.
В VBA предусмотрены следующие типы данных:
Внимание! Попытка объявить переменную с типом Decimal (например, Dim n As Decimal) приведет к синтаксической ошибке. Чтобы получить возможность работать с типом Decimal, переменную нужно изначально объявить как Variant или вообще объявить без типа (Dim n), поскольку тип данных Variant используется в VBA по умолчанию.
Можно еще использовать пользовательские типы данных, но их вначале нужно определить при помощи выражения Type. Обычно пользовательские типы данных используются как дополнительное средство проверки вводимых пользователем значений (классический пример — почтовый индекс).
Некоторые моменты, связанные с выбором типов данных для переменных:
Такой подход является устаревшим и к использованию не рекомендуется.
При объявлении переменных можно и не указывать ее тип. Например, наше объявление может выглядеть так:
В этом случае переменная будет автоматически объявлена с типом Variant.
В принципе, в VBA можно работать и без объявления переменных. Например, такой код
будет вполне работоспособным. Если мы используем переменную в программе без ее объявления, то будет автоматически создана новая переменная типа Variant. Однако объявлять переменные нужно обязательно! И при этом желательно явно указывать нужный тип данных. Почему:
Dim oWbk As Workbook
Set oWbk = Workbooks.Add()
Set oWbk = Workbooks.Add()
Но подсказка по свойствам и методам объекта oWbk будет работать только во втором случае.
Все опытные разработчики вообще запрещают использование переменных без явного их объявления. Для этого можно воспользоваться специальной командой компилятора (она помещается только в раздел объявлений модуля)
Проиллюстрировать, зачем они это делают, можно на простом примере:
С виду код не должен вызывать никаких проблем и просто выводить в окне сообщения единицу. На самом деле он выведет пустое окно сообщения. Причина спрятана очень коварно: в третьей строке n — это вовсе не английская буква N, а русская П. На вид в окне редактора кода отличить их очень сложно. В то же время компилятор VBA, встретив такой код, просто создаст новую переменную с типом данных Variant, у которой будет пустое значение. На выявление такой ошибки может потребоваться определенное время.
Хорошее правило — объявлять переменные заблаговременно, а не когда они потребовались. Это позволяет сделать программу более читаемой и четко спланированной.
Можно объявить несколько переменных в одной строке, например, так:
Dim n1 As Integer, s1 As String
Присвоение значений переменным выглядит так:
Если нужно увеличить уже существующее значение переменной, то команда может выглядеть так:
В обоих примерах знак равенства означает не «равно», а присвоить.
При присвоении значений переменным нужно помнить о следующем:
Обратите внимание, что при присвоении значения даты/времени таким «явным способом» нам придется использовать принятые в США стандарты: 05 в данном случае — это месяц, 06 — день. Отображение же этого значения (например, в окне сообщения) будет зависеть от региональных настроек на компьютере пользователя.
Если нужно передать шестнадцатеричное значение, то перед ним ставятся символы &H:
Что содержится в переменных до присвоения им значений?
Константы, объявление, ключевое слово Const, встроенные константы, vbCrLf
Константы — еще один контейнер для хранения данных, но, в отличие от переменных, они не изменяются в ходе выполнения VBA-программы. Для чего нужны константы:
В VBA константы определяются при помощи ключевого слова Const:
Const COMP_NAME As String = “Microsoft”
При попытке в теле процедуры изменить значение константы будет выдано сообщение об ошибке.
Константы очень удобны при работе с группами именованных элементов (дни недели, месяцы, цвета, клавиши, типы окон и т.п.). Они позволяют использовать в коде программы легко читаемые обозначения вместо труднозапоминаемых числовых кодов. Например, строки
функционально одинаковы, но в чем смысл первой строки, догадаться гораздо легче.
MsgBox («Первая строка» + vbCrLf + «Вторая строка»)
Множество наборов констант встроено в объектные модели, которые мы будем рассматривать в последних разделах.