Какая инструкция предназначена для описания переменной

Описание типа каждой переменной делает
программу надежнее и, кроме того,
убыстряет ее работу, т. к. VBA не требуется
тратить время на распознавание типа
неописанной переменной при каждом
обращении к ней.

Синтаксис:

Dim [WithEvents] ИмяПеременной[([Индексы]]] [As
[New] Тип] __[, [WithEvents]
ИмяПеременной [([Индексы] I
] [As [New] Тип]]
. . .

Аргументы:

WithEvents

Ключевое слово,
указывающее, что аргумент ИмяПеременной
является именем объектной переменной,
которая используется при отклике на
события, генерируемые объектом ActiveX
(т. е. объектом, который может быть
открыт для других приложений и средств
программирования).

ИмяПеременной

Имя переменной,
удовлетворяющее стандартным правилам
именования переменных

Индексы

Размерности
переменной массива; допускается
описание до 60 размерностей. Для задания
аргумента Индексы используется
следующий синтаксис:

[Нижний
То] Верхний [, [Нижний То] Верхний] …

Если
нижний индекс не задан явно, нижняя
граница массива определяется инструкцией
option Base- Если отсутствует инструкция
option Base, нижняя граница массива равняется
нулю

New

Ключёвое слово,
включающее возможность неявного
создания объекта. Если указано ключевое
слово New при описании объектной
переменной, новый экземпляр объекта
создается при первой ссылке на него,
поэтому нет необходимости присваивать
ссылку на объект с помощью инструкции
Set

Тип

Тип данных
переменной. Для каждой описываемой
переменной следует использовать
отдельное предложение As тип

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

Инструкция Dim предназначена для описания
типа данных переменной на уровне модуля
или процедуры. Например, следующая
инструкция описывает переменную с типом
Integer.

Dim N As Integer

Инструкция Dim предназначена также для
описания объектного типа переменных.
Далее приводится описание переменной
для нового экземпляра рабочего листа.

Dim X Аs New Worksheet

Если при описании объектной переменной
не используется ключевое слово New то
для использования объекта, на который
ссылается переменная, существующий
объект должен быть присвоен переменной
с помощью инструкции Set.

Если тип данных или тип объекта не задан,
и в модуле отсутствует инструкция
DefТип, по умолчанию переменная получает
тип Variant. Для обязательного описания
всех переменных надо поместить в начале
модуля инструкцию Оption Explicit. Использование
этой инструкции полезно при отладке
программ, т. к. она позволяет легче
отслеживать возможную путаницу в именах
при наборе программы.

3.2.1 Допустимые имена

В VBA пользователь определяет имена
переменных, функций, процедур, типов,
постоянных и других объектов. Вводимые
пользователем имена должны отражать
суть обозначаемого объекта так, чтобы
делать программу легко читаемой. В VBA
имеются следующие ограничения на имена:

1. Длина имени не должна превышать 255
символов.

2. Имя не может содержать точек, пробелов
и следующих символов: % , & , !, #.©, $.

3. Имя может содержать любую комбинацию
букв, цифр и символов, начинающуюся с
буквы.

4. Имена должны быть уникальны внутри
области, в которой они определены.

5. Не следует использовать имена,
совпадающие с ключевыми словами VBA и
именами встроенных функций и процедур.

Хотя регистр букв (верхний или нижний)
в имени не имеет значения, умелое
использование его может существенно
облегчить понимание содержательной
стороны переменной

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Основные понятия. Элементы грамматики языка.

Для выполнения программы Visual Basic нужно стартовать содержащую эту программу процедуру. Процедуры выполняют некоторые действия, могут иметь параметры, значения которых они могут изменять. Процедуры обработки событий описываются как Private ; их можно вызывать только внутри формы. Процедуры являются общими, если они содержатся в модуле, тогда они могут быть вызваны процедурами другого контейнера. При их описании используется ключевое слово Public.

Модуль

Модуль — это совокупность описаний и процедур, сохранeнный под общим именем. Сохраняется в виде файла с расширениями .BAS и .CLS. Существуют типы — стандартный модуль и модуль класса (модуль, в котором сохранeн класс).

Переменная

Переменная — программный объект, имеющий имя, тип, размер и значение, которое может быть присвоено/возвращено программой. Имя должно начинаться с буквы и содержать не более 256 символов. Для доступа к содержимому памяти достаточно знать имя переменой.

Тип данных — характеристика переменной, определяющая тип данных который может храниться в этой переменной. Типы данных даны в табл. 1.2.

Таблица
1.2.
Типы данных

Тип данных Размер Диапазон значений
Byte (байт) 1 байт От 0 до 255
Boolean (логический) 2 байта True или False
Integer (целое) 2 байта От -32 768 до 32 767
Long (длинное целое) 4 байта От -2 147 483 648 до 2 147 483 647
Single (с плавающей точкой обычной точности) 4 байта От -3,402823E38 до -1,401298E-45 для отрицательных значений.От 1,401298E-45
до 3,402823E38 для положительных значений
Double (с плавающей точкой двойной точности) 8 байт От — 1,79769313486232E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений.
Currency (денежный) 8 байт От -922 337 203 685 477,5808 до 922 337 203 685 477,5807
Object (объект) 4 байта Любой указатель объекта
String (строка Переменной длины) 10 байт + длина строки От 0 до прибл. 2 млрд.
String (строка постоянной длины) длина строки От 1 до прибл. 65 400
Variant (числовые подтипы) 16 байт Любое числовое значение вплоть до границ диапазона типа Double
Variant (строковые подтипы) 22 байта + длина строки Как для строки (String) переменной длины.
Тип данных, определяемый пользователем (с помощью ключевого слова Type) объем определяется типом данных

Для решения вопроса о равенстве чисел с плавающей точкой можно сравнивать абсолютное значение их разности с некоторой наперед заданной величиной. Приведем пример.

Dim A As Single, B As Single, del As Single
del = Abs(A - B)
If del <= 0.01 Then
Label1.Caption = "Числа равны с точностью 0.01" 
Else
Label1.Caption = "Числа не равны"
End If

Описание переменных. Инструкцией описания сообщается имя и тип переменной; для описания переменных используется инструкция Dim, примеры:

Dim Price As Currency
Dim Name (15) As String ' описание массива

Допускается описание нескольких переменных в одной строке:

Доступность. Доступность определяет, в каких разделах программы переменные могут использоваться. Локальными переменными являются переменные, описанные внутри процедуры, блока (блок заканчивается ключевыми словами End Sub, Next, Loop…). Переменные контейнера описываются в области описаний контейнера (формы, модуля). Глобальные переменные описываются в модуле с использованием ключевого слова Public, они доступны во всех модулях и процедурах проекта.

Время жизни переменных. Локально описанные переменные после выполнения процедуры удаляются из памяти, их содержимое при этом не сохраняется, иногда — это недостаток. Имеется возможность описать переменную как Static, при этом при выходе из процедуры значение статической переменной сохраняется и при новом вызове переменная имеет значение, которое она имела при последнем выходе из процедуры

Идентификаторы типов. Тип данных при описании может устанавливаться добавлением знака типа к имени переменной. В табл. 1.3. приведены соответствующие символы

Таблица
1.3.
Символы, используемые в качестве идентификаторов типов данных

Тип Символ Пример
Integer % -546%
Long & 2147483648&
Single ! -3.402823У+38!
Double # -1.79769313486232У308#
String $ ккккккккк$
Currency @ -922337203685477.5808@

Неявное описание переменных. Описание переменной может продлиться при появлении еe в коде. Например, две записи ниже эквивалентны:

Dim Price As Currency Price=9000
Price@=9000

Option Expliсit. Для того, чтобы устранить возможные ошибки в программе нужно описывать переменные. Для этого может использоваться опция Expliсit. Для работы с ней нужно установить флажок: меню Инструменты to Опции Среда to Требование описания переменных to перезагрузить Visual Basic.

Необходимо перечислить некоторые функции, используемые при работе с данными. Функции Val(string), Str(number). Часто возникает необходимость преобразовать числовой тип в тип String и наоборот, например, при вводе чисел в текстовое поле. Для этого используются функции Val(string) и Str(number). Функция Val(string) возвращает число, содержащееся в строке. Функция Str(number) преобразует числовое выражение в тип String, являющийся строковым представлением числа. Функции преобразования типов данных. Если переданное в функцию значение аргумента, например, находится вне допустимого диапазона, то возникает ошибка. Чтобы избежать такого рода ошибок используют функции преобразования типов, в табл. 1.4., даны некоторые из них.

Таблица
1.4.
Некоторые функции преобразования типов данных

Функция Диапазон аргумента выражения Возвращаемый тип
CCur(выражение) от -922 337 203 685 477,5808 до 922 337 203 685 477,5807 Currency
CLng(выражение) от -2 147 483 648 до 2 147 483 647 с округлением дробной части Long
CSng(выражение) от -3,402823E38 до -1,401298E-45 для отрицательных чисел, от 1,401298E-45 до 3,402823E38 для положительных чисел Single
CVar Диапазон значений Double для числовых значений. Диапазон значений String для нечисловых значений Variant
CStr(выражение) Возвращаемые значения функции CStr зависят от аргумента выражения String
Массив

Массив представляет собой переменную, которой соответствует множество ячеек памяти для хранения значений. Массив — это набор элементов, имеющих свой порядковый номер (индекс). Пример описания и инициализации массива:

Dim m(3) As Integer
For i = 0 To 2
m(i) = i
Next

Обозначения элементов данного массива: m(0), m(1), m(2); UBound = 3 — верхний индекс размерности; LBound = 0 — нижний индекс размерности; Length = 4 — наибольшее число элементов, которое можно разместить; Rank = 1 — ранг. При работе с массивами индексация элементов начинается с 0, однако можно формировать массив с другого индекса.

Различают статические массивы, границы которых устанавливаются в процессе конструирования и динамические массивы, которые могут изменять свои размеры/размерности в ходе выполнения программы. Динамический массив можно создать следующим образом:

(General) (Declarations)
Rem описать массив без указания размерности
Dim mass() As Variant 
Private Sub Command1_Click()
...
Rem установить размерность массива с использованием инструкции ReDim
ReDim mass(17) 
:.
End Sub

При описании многомерных массивов индексы размерностей разделяются запятой, пример:

Dim maName (7, 7) As String
Dim maBea (5, 7, 9) As String

Имеется возможность указывать диапазоны индексов:

Dim massMain (5, 7 To 16, 9 To 25, 3, 15 To 20, 23 To 29, 2)

Можно использовать присваивание массивов (см. справочник).

Константа

Константа имеет символьное имя и значение. При описании констант используется ключевое слово Const. Синтаксис:

[Public | Private] Const имя_константы As тип_данных = Значение

Рассматриваются константы:

  • внутренние (определяемые системой). Информацию о существующих константах можно получить в Object Browser,
  • определяемые пользователем.

Внутренние константы записываются с префиксом из 2-х букв, обозначающих библиотеку объектов (например, префикс vb — библиотека объектов Visual Basic, префикс db — библиотека объектов Access, префикс xl — библиотека объектов Excel), пример: dbAppendOnly.

Переменные VBA, объявление переменных, Option Explicit, правила именования, типы данных VBA, исходные значения переменных

Переменные — контейнеры для хранения изменяемых данных. Без них не обходится практически ни одна программа. Для простоты переменную можно сравнить с номерком в гардеробе — вы сдаете в «гардероб» какие-то данные, в ответ вам выдается номерок. Когда вам опять потребовались эти данные, вы «предъявляете номерок» и получаете их. Пример работы с переменными в VBA может выглядеть так:

Dim nMyAge As Integer

nMyAge = nMyAge + 10

Перед работой с переменной настоятельно рекомендуется ее объявить. Объявление переменной в нашем примере выглядит так:

Dim nMyAge As Integer

Как расшифровать эту строку:

Dim — это область видимости переменной. В VBA предусмотрено 4 ключевых слова для определения области видимости переменных:

  • Dim — используется в большинстве случаев. Если переменная объявлена как Dim в области объявлений модуля, она будет доступна во всем модуле, если в процедуре — только на время работы этой процедуры;
  • Private — при объявлении переменных в VBA значит то же, что и Dim;
  • Public — такая переменная будет доступна всем процедурам во всех модулях данного проекта, если вы объявили ее в области объявлений модуля. Если вы объявили ее внутри процедуры, она будет вести себя как Dim/Private;
  • Static — такие переменные можно использовать только внутри процедуры. Эти переменные видны только внутри процедуры, в которой они объявлены, зато они сохраняют свое значение между разными вызовами этой процедуры. Обычно используются для накопления каких-либо значений. Например:

Static nVar1 As Integer

nVar1 = nVar1 + 1

Если нет никаких особых требований, то есть смысл всегда выбирать область видимости Dim.

Второе слово в нашем объявление (nMyAge) — это идентификатор (проще говоря, имя) переменной. Правила выбора имен в VBA едины для многих элементов (переменные, константы, функции и процедуры и т.п.). Имя:

  • должно начинаться с буквы;
  • не должно содержать пробелов и символов пунктуации (исключение — символ подчеркивания);
  • максимальная длина — 255 символов;
  • должно быть уникальным в текущей области видимости (подробнее — далее);
  • зарезервированные слова (те, которые подсвечиваются другим цветом в окне редактора кода) использовать нельзя.

При создании программ VBA настоятельно рекомендуется определиться с правилами, по которым будут присваиваться имена объектам — соглашение об именовании. Чаще всего используется так называемое венгерское соглашение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):

  • имя переменной должно начинаться с префикса, записанного строчными буквами. Префикс указывает, что именно будет храниться в этой переменной:
    • str (или s) — String, символьное значение;
    • fn (или f) — функция;
    • c (или сделать все буквы заглавными) — константа;
    • b — Boolean, логическое значение (true или false);
    • d — дата;
    • obj (или o) — ссылка на объект;
    • n — числовое значение.
  • имена функций, методов и каждое слово в составном слове должно начинаться с заглавной буквы:
  • в ранних версиях VB не было слова Const — все константы определялись как переменные, а для отличия их записывали заглавными буквами, между словами ставили подчеркивания:

Многие программисты используют такой подход для обозначения констант и сейчас (но использование ключевого слова Const теперь обязательно — об этом будет рассказано в следующем разделе).

Третья часть нашего объявления — As Integer — это указание на тип данных нашей переменной. Тип данных определяет, данные какого вида можно будет хранить в нашей переменной.

В VBA предусмотрены следующие типы данных:

  • числовые (byte — целое число от 0 до 255, integer — целое число от -32768 до 32767, long — большое целое число, currency (большое десятичное число с 19 позициями, включая 4 позиции после запятой), decimal (еще большее десятичное число с 29 позициями), single и double — значение с плавающей запятой (double в два раза больше));

Внимание! Попытка объявить переменную с типом Decimal (например, Dim n As Decimal) приведет к синтаксической ошибке. Чтобы получить возможность работать с типом Decimal, переменную нужно изначально объявить как Variant или вообще объявить без типа (Dim n), поскольку тип данных Variant используется в VBA по умолчанию.

  • строковые (string переменной длины (до примерно 2 млрд символов) и фиксированной длины (до примерно 65400 символов);
  • дата и время (date — от 01.01.100 до 31.12.9999);
  • логический (boolean — может хранить только значения True и False);
  • объектный (object — хранит ссылку на любой объект в памяти);
  • Variant — специальный тип данных, который может хранить любые другие типы данных.

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

Некоторые моменты, связанные с выбором типов данных для переменных:

  • общий принцип — выбирайте наименьший тип данных, который может вместить выбранные вами значения. Если есть какие-то сомнения — выбирайте больший тип данных во избежание возникновения ошибок;
  • если есть возможность, лучше не использовать типы данных с плавающей запятой (single и double). Работа с такими типами данных производится медленнее, кроме того, могут быть проблемы при сравнениях за счет округлений;
  • если есть возможность, лучше не пользоваться типом Variant. Этот тип все равно приводится VBA к одному из других типов, но памяти для него требуется больше. Кроме того, в ходе такого неявного образования могут возникнуть ошибки;
  • при определении переменных можно использовать так называемые символы определения типа (% — integer, $ — String и т.п.). Например, в нашем примере нужно закомментировать строку Dim nVar 1 As Integer, а во второй строке написать:

Такой подход является устаревшим и к использованию не рекомендуется.

При объявлении переменных можно и не указывать ее тип. Например, наше объявление может выглядеть так:

В этом случае переменная будет автоматически объявлена с типом Variant.

В принципе, в VBA можно работать и без объявления переменных. Например, такой код

nVar1 = nVar1 + 1

будет вполне работоспособным. Если мы используем переменную в программе без ее объявления, то будет автоматически создана новая переменная типа Variant. Однако объявлять переменные нужно обязательно! И при этом желательно явно указывать нужный тип данных. Почему:

  • сокращается количество ошибок: программа с самого начала откажется принимать в переменную значение неправильно типа (например, строковое вместо числового);
  • при работе с объектами подсказка по свойствам и методам действует только тогда, когда мы изначально объявили объектную переменную с нужным типом. Например, в Excel два варианта кода будут работать одинаково:

Dim oWbk As Workbook

Set oWbk = Workbooks.Add()

Set oWbk = Workbooks.Add()

Но подсказка по свойствам и методам объекта oWbk будет работать только во втором случае.

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

а можно вставлять эту команду во все модули при их создании автоматически — установив в окне редактора кода флажок Require Variable Declarations (меню Tools -> Options, вкладка Editor).

Проиллюстрировать, зачем они это делают, можно на простом примере:

С виду код не должен вызывать никаких проблем и просто выводить в окне сообщения единицу. На самом деле он выведет пустое окно сообщения. Причина спрятана очень коварно: в третьей строке n — это вовсе не английская буква N, а русская П. На вид в окне редактора кода отличить их очень сложно. В то же время компилятор VBA, встретив такой код, просто создаст новую переменную с типом данных Variant, у которой будет пустое значение. На выявление такой ошибки может потребоваться определенное время.

Хорошее правило — объявлять переменные заблаговременно, а не когда они потребовались. Это позволяет сделать программу более читаемой и четко спланированной.

Можно объявить несколько переменных в одной строке, например, так:

Dim n1 As Integer, s1 As String

Присвоение значений переменным выглядит так:

Если нужно увеличить уже существующее значение переменной, то команда может выглядеть так:

nVar1 = nVar1 + 1

В обоих примерах знак равенства означает не «равно», а присвоить.

При присвоении значений переменным нужно помнить о следующем:

  • строковые значения всегда заключаются в двойные кавычки:
  • значение даты/времени заключаются в «решетки» — символы фунта:

Обратите внимание, что при присвоении значения даты/времени таким «явным способом» нам придется использовать принятые в США стандарты: 05 в данном случае — это месяц, 06 — день. Отображение же этого значения (например, в окне сообщения) будет зависеть от региональных настроек на компьютере пользователя.

Если нужно передать шестнадцатеричное значение, то перед ним ставятся символы &H:

Что содержится в переменных до присвоения им значений?

  • В переменных всех числовых типов данных — 0.
  • В строковых переменных переменной длины — «» (строка нулевой длины).
  • В строковых переменных фиксированной длины — строка данной длины с символами ASCII 0 (эти символы на экран не выводятся).
  • В Variant — пустое значение.
  • В Object — ничто (нет ссылки ни на один из объектов).

Синтаксис VBA Переменные, константы и типы данных

3.3 Переменные, константы и типы данных

Переменные VBA, объявление переменных, Option Explicit, правила именования, типы данных VBA, исходные значения переменных

Переменные — контейнеры для хранения изменяемых данных. Без них не обходится практически ни одна программа. Для простоты переменную можно сравнить с номерком в гардеробе — вы сдаете в «гардероб» какие-то данные, в ответ вам выдается номерок. Когда вам опять потребовались эти данные, вы «предъявляете номерок» и получаете их. Пример работы с переменными в VBA может выглядеть так:

Dim nMyAge As Integer

nMyAge = nMyAge + 10

Перед работой с переменной настоятельно рекомендуется ее объявить. Объявление переменной в нашем примере выглядит так:

Dim nMyAge As Integer

Как расшифровать эту строку:

Dim — это область видимости переменной. В VBA предусмотрено 4 ключевых слова для определения области видимости переменных:

  • Dim — используется в большинстве случаев. Если переменная объявлена как Dim в области объявлений модуля, она будет доступна во всем модуле, если в процедуре — только на время работы этой процедуры;
  • Private — при объявлении переменных в VBA значит то же, что и Dim;
  • Public — такая переменная будет доступна всем процедурам во всех модулях данного проекта, если вы объявили ее в области объявлений модуля. Если вы объявили ее внутри процедуры, она будет вести себя как Dim/Private;
  • Static — такие переменные можно использовать только внутри процедуры. Эти переменные видны только внутри процедуры, в которой они объявлены, зато они сохраняют свое значение между разными вызовами этой процедуры. Обычно используются для накопления каких-либо значений. Например:

Static nVar1 As Integer

nVar1 = nVar1 + 1

Если нет никаких особых требований, то есть смысл всегда выбирать область видимости Dim.

Второе слово в нашем объявление (nMyAge) — это идентификатор (проще говоря, имя) переменной. Правила выбора имен в VBA едины для многих элементов (переменные, константы, функции и процедуры и т.п.). Имя:

  • должно начинаться с буквы;
  • не должно содержать пробелов и символов пунктуации (исключение — символ подчеркивания);
  • максимальная длина — 255 символов;
  • должно быть уникальным в текущей области видимости (подробнее — далее);
  • зарезервированные слова (те, которые подсвечиваются другим цветом в окне редактора кода) использовать нельзя.

При создании программ VBA настоятельно рекомендуется определиться с правилами, по которым будут присваиваться имена объектам — соглашение об именовании. Чаще всего используется так называемое венгерское соглашение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):

  • имя переменной должно начинаться с префикса, записанного строчными буквами. Префикс указывает, что именно будет храниться в этой переменной:
    • str (или s) — String, символьное значение;
    • fn (или f) — функция;
    • c (или сделать все буквы заглавными) — константа;
    • b — Boolean, логическое значение (true или false);
    • d — дата;
    • obj (или o) — ссылка на объект;
    • n — числовое значение.
  • имена функций, методов и каждое слово в составном слове должно начинаться с заглавной буквы:
  • в ранних версиях VB не было слова Const — все константы определялись как переменные, а для отличия их записывали заглавными буквами, между словами ставили подчеркивания:

Многие программисты используют такой подход для обозначения констант и сейчас (но использование ключевого слова Const теперь обязательно — об этом будет рассказано в следующем разделе).

Третья часть нашего объявления — As Integer — это указание на тип данных нашей переменной. Тип данных определяет, данные какого вида можно будет хранить в нашей переменной.

В VBA предусмотрены следующие типы данных:

  • числовые (byte — целое число от 0 до 255, integer — целое число от -32768 до 32767, long — большое целое число, currency (большое десятичное число с 19 позициями, включая 4 позиции после запятой), decimal (еще большее десятичное число с 29 позициями), single и double — значение с плавающей запятой (double в два раза больше));

Внимание! Попытка объявить переменную с типом Decimal (например, Dim n As Decimal) приведет к синтаксической ошибке. Чтобы получить возможность работать с типом Decimal, переменную нужно изначально объявить как Variant или вообще объявить без типа (Dim n), поскольку тип данных Variant используется в VBA по умолчанию.

  • строковые (string переменной длины (до примерно 2 млрд символов) и фиксированной длины (до примерно 65400 символов);
  • дата и время (date — от 01.01.100 до 31.12.9999);
  • логический (boolean — может хранить только значения True и False);
  • объектный (object — хранит ссылку на любой объект в памяти);
  • Variant — специальный тип данных, который может хранить любые другие типы данных.

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

Некоторые моменты, связанные с выбором типов данных для переменных:

  • общий принцип — выбирайте наименьший тип данных, который может вместить выбранные вами значения. Если есть какие-то сомнения — выбирайте больший тип данных во избежание возникновения ошибок;
  • если есть возможность, лучше не использовать типы данных с плавающей запятой (single и double). Работа с такими типами данных производится медленнее, кроме того, могут быть проблемы при сравнениях за счет округлений;
  • если есть возможность, лучше не пользоваться типом Variant. Этот тип все равно приводится VBA к одному из других типов, но памяти для него требуется больше. Кроме того, в ходе такого неявного образования могут возникнуть ошибки;
  • при определении переменных можно использовать так называемые символы определения типа (% — integer, $ — String и т.п.). Например, в нашем примере нужно закомментировать строку Dim nVar 1 As Integer, а во второй строке написать:

Такой подход является устаревшим и к использованию не рекомендуется.

При объявлении переменных можно и не указывать ее тип. Например, наше объявление может выглядеть так:

В этом случае переменная будет автоматически объявлена с типом Variant.

В принципе, в VBA можно работать и без объявления переменных. Например, такой код

nVar1 = nVar1 + 1

будет вполне работоспособным. Если мы используем переменную в программе без ее объявления, то будет автоматически создана новая переменная типа Variant. Однако объявлять переменные нужно обязательно! И при этом желательно явно указывать нужный тип данных. Почему:

  • сокращается количество ошибок: программа с самого начала откажется принимать в переменную значение неправильно типа (например, строковое вместо числового);
  • при работе с объектами подсказка по свойствам и методам действует только тогда, когда мы изначально объявили объектную переменную с нужным типом. Например, в Excel два варианта кода будут работать одинаково:

Dim oWbk As Workbook

Set oWbk = Workbooks.Add()

Set oWbk = Workbooks.Add()

Но подсказка по свойствам и методам объекта oWbk будет работать только во втором случае.

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

а можно вставлять эту команду во все модули при их создании автоматически — установив в окне редактора кода флажок Require Variable Declarations (меню Tools -> Options, вкладка Editor).

Проиллюстрировать, зачем они это делают, можно на простом примере:

С виду код не должен вызывать никаких проблем и просто выводить в окне сообщения единицу. На самом деле он выведет пустое окно сообщения. Причина спрятана очень коварно: в третьей строке n — это вовсе не английская буква N, а русская П. На вид в окне редактора кода отличить их очень сложно. В то же время компилятор VBA, встретив такой код, просто создаст новую переменную с типом данных Variant, у которой будет пустое значение. На выявление такой ошибки может потребоваться определенное время.

Хорошее правило — объявлять переменные заблаговременно, а не когда они потребовались. Это позволяет сделать программу более читаемой и четко спланированной.

Можно объявить несколько переменных в одной строке, например, так:

Dim n1 As Integer, s1 As String

Присвоение значений переменным выглядит так:

Если нужно увеличить уже существующее значение переменной, то команда может выглядеть так:

nVar1 = nVar1 + 1

В обоих примерах знак равенства означает не «равно», а присвоить.

При присвоении значений переменным нужно помнить о следующем:

  • строковые значения всегда заключаются в двойные кавычки:
  • значение даты/времени заключаются в «решетки» — символы фунта:

Обратите внимание, что при присвоении значения даты/времени таким «явным способом» нам придется использовать принятые в США стандарты: 05 в данном случае — это месяц, 06 — день. Отображение же этого значения (например, в окне сообщения) будет зависеть от региональных настроек на компьютере пользователя.

Если нужно передать шестнадцатеричное значение, то перед ним ставятся символы &H:

Что содержится в переменных до присвоения им значений?

  • В переменных всех числовых типов данных — 0.
  • В строковых переменных переменной длины — «» (строка нулевой длины).
  • В строковых переменных фиксированной длины — строка данной длины с символами ASCII 0 (эти символы на экран не выводятся).
  • В Variant — пустое значение.
  • В Object — ничто (нет ссылки ни на один из объектов).

Константы, объявление, ключевое слово Const, встроенные константы, vbCrLf

Константы — еще один контейнер для хранения данных, но, в отличие от переменных, они не изменяются в ходе выполнения VBA-программы. Для чего нужны константы:

  • код становится лучше читаемым/убираются потенциальные ошибки;
  • чтобы изменить какое-либо значение, которое много раз используется в программе (например, уровень налога) — это можно сделать один раз.

В VBA константы определяются при помощи ключевого слова Const:

Const COMP_NAME As String = “Microsoft”

При попытке в теле процедуры изменить значение константы будет выдано сообщение об ошибке.

Константы очень удобны при работе с группами именованных элементов (дни недели, месяцы, цвета, клавиши, типы окон и т.п.). Они позволяют использовать в коде программы легко читаемые обозначения вместо труднозапоминаемых числовых кодов. Например, строки

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

В VBA встроено множество служебных констант: календарных, для работы с файлами, цветами, формами, типами дисков и т.п. Просмотреть их можно через справочную систему VBA: Microsoft Visual Basic Documentation -> Visual Basic Reference -> Constants. Про одну из констант (она находится в разделе Miscellaneous) следует сказать особо: константа vbCrLf позволяет произвести переход на новую строку. Например:

MsgBox («Первая строка» + vbCrLf + «Вторая строка»)

Множество наборов констант встроено в объектные модели, которые мы будем рассматривать в последних разделах.

Оператор Dim Dim statement

Объявляет переменные и распределяет дисковое пространство. Declares variables and allocates storage space.

Синтаксис Syntax

Dim [ WithEvents ] имя_переменной [([ подстрочные знаки ])] [ as [ New ] Type ] [, [ WithEvents ] имя_переменной [([ подстрочно ])] [ as [ New ] Type ]] .. . Dim [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ] [ , [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ]] . . .

Синтаксис оператора Dim состоит из следующих частей: The Dim statement syntax has these parts:

Часть Part Описание Description
WithEvents WithEvents Необязательно. Optional. Ключевое слово, указывающее, что varname — это объектная переменная, которая используется для ответа на события, запускаемые объектом ActiveX. Keyword that specifies that varname is an object variable used to respond to events triggered by an ActiveX object. Ключевое слово WithEvents можно использовать только в модулях классов. WithEvents is valid only in class modules. С помощью WithEventsможно объявить любое количество отдельных переменных, но нельзя создавать массивы с помощью WithEvents. You can declare as many individual variables as you like by using WithEvents, but you can’t create arrays with WithEvents. Также нельзя использовать ключевое слово New с атрибутом WithEvents. You can’t use New with WithEvents.
varname varname Обязательный. Required. Имя переменной; соответствует стандартным соглашениям об именовании переменных. Name of the variable; follows standard variable naming conventions.
индексов subscripts Необязательно. Optional. Измерения переменной массива (поддерживается объявление до 60 измерений). Dimensions of an array variable; up to 60 multiple dimensions may be declared. Аргумент » подстрочные индексы » использует следующий синтаксис: [ нижнее значение ] Upper [, [ снизу ] сверху ] .. The subscripts argument uses the following syntax: [ lower To ] upper [ , [ lower To ] upper ] . . ..

Если не указано _явно, Нижняя_граница массива управляется оператором Option Base . When not explicitly stated in lower, the lower bound of an array is controlled by the Option Base statement. Если оператор Option Base не задан, нижняя граница равна нулю. The lower bound is zero if no Option Base statement is present.

New New Необязательно. Optional. Ключевое слово, позволяющее создать объект неявным образом. Keyword that enables implicit creation of an object. Если вы используете New при объявлении переменной объекта, новый экземпляр объекта создается по первой ссылке, поэтому для назначения ссылки на объект не нужно использовать оператор Set . If you use New when declaring the object variable, a new instance of the object is created on first reference to it, so you don’t have to use the Set statement to assign the object reference.

Ключевое слово New не может использоваться для объявления переменных любых встроенных типов данных или для объявления экземпляров зависимых объектов и не может использоваться с WithEvents. The New keyword can’t be used to declare variables of any intrinsic data type or to declare instances of dependent objects, and it can’t be used with WithEvents.

type type Необязательно. Optional. Тип данных переменной; Допустимые значения: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (для строк переменной длины), Длина строки (для строк фиксированной длины), Object, Variant, определяемый пользователем типили тип объекта. Data type of the variable; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (for variable-length strings), String length (for fixed-length strings), Object, Variant, a user-defined type, or an object type. Используйте отдельное предложение as Type для каждой объявляемой переменной. Use a separate As type clause for each variable you declare.

Примечания Remarks

Переменные, объявляемые с помощью оператора Dim на уровне модуля, доступны всем процедурам внутри этого модуля. Variables declared with Dim at the module level are available to all procedures within the module. На уровне процедуры переменные доступны только внутри соответствующей процедуры. At the procedure level, variables are available only within the procedure.

Используйте оператор Dim на уровне модуля или процедуры, чтобы объявить тип данных переменной. Use the Dim statement at the module or procedure level to declare the data type of a variable. Например, следующий оператор объявляет переменную с типом Integer. For example, the following statement declares a variable as an Integer.

Также используйте оператор Dim для объявления типа объекта переменной. Also use a Dim statement to declare the object type of a variable. В следующем примере объявляется переменная для нового экземпляра листа. The following declares a variable for a new instance of a worksheet.

Если ключевое слово New не используется при объявлении переменной объекта, переменная, которая ссылается на этот объект, должна быть назначена существующему объекту с помощью оператора Set , прежде чем его можно будет использовать. If the New keyword is not used when declaring an object variable, the variable that refers to the object must be assigned an existing object by using the Set statement before it can be used. Пока она не назначена объекту, объявленная объектная переменная имеет особое значение Nothing, указывающее на отсутствие ссылки на какой-либо конкретный экземпляр объекта. Until it is assigned an object, the declared object variable has the special value Nothing, which indicates that it doesn’t refer to any particular instance of an object.

Вы можете также использовать оператор Dim с пустыми скобками для объявления динамического массива. You can also use the Dim statement with empty parentheses to declare a dynamic array. После объявления динамического массива используйте оператор ReDim в процедуре, чтобы определить количество измерений и элементов в массиве. After declaring a dynamic array, use the ReDim statement within a procedure to define the number of dimensions and elements in the array. При попытке повторного объявления измерения для переменной массива, размер которой был явно указан в закрытом, общедоступном операторе или операторе Dim , возникает ошибка. If you try to redeclare a dimension for an array variable whose size was explicitly specified in a Private, Public, or Dim statement, an error occurs.

Если не указать тип данных или тип объекта и в модуле отсутствует оператор Def_type_ , переменная будет иметь значение Variant по умолчанию. If you don’t specify a data type or object type, and there is no Def_type_ statement in the module, the variable is Variant by default. При инициализации переменных числовой переменной присваивается значение 0, строке переменной длины — строка нулевой длины («»), а строка фиксированной длины заполняется нулями. When variables are initialized, a numeric variable is initialized to 0, a variable-length string is initialized to a zero-length string («»), and a fixed-length string is filled with zeros. Переменные типа Variant при инициализации получают значение Empty. Variant variables are initialized to Empty. Каждый элемент переменной определяемого пользователем типа инициализируется как отдельная переменная. Each element of a user-defined type variable is initialized as if it were a separate variable.

Когда оператор Dim используется в процедуре, обычно этот оператор Dim располагают в начале этой процедуры When you use the Dim statement in a procedure, you generally put the Dim statement at the beginning of the procedure.

Пример Example

В этом примере показывается, как используется оператор Dim для объявления переменных. This example shows the Dim statement used to declare variables. В нем также показывается, как оператор Dim используется для объявления массивов. It also shows the Dim statement used to declare arrays. Нижняя граница по умолчанию для индексов массивов равна 0 и может быть переопределена на уровне модуля с помощью оператора Option Base . The default lower bound for array subscripts is 0 and can be overridden at the module level by using the Option Base statement.

См. также See also

  • Типы данных Data types
  • Операторы Statements

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Переменные и константы в VBA

В VBA, как и в любом другом языке программирования, переменные и константы используются для хранения каких-либо значений. Как и следует из названия, переменные могут изменяться, константы же хранят фиксированные значения.

Например, константа Pi хранит значение 3,14159265… Число “Пи” не будет изменяться в ходе выполнения программы, но все же хранить такое значение удобнее как константу.

В то же время мы можем использовать переменную sVAT_Rate для хранения ставки НДС на покупаемые товары. Величина переменной sVAT_Rate может изменяться в зависимости от того, что за товар приобретается.

Типы данных

Все переменные и константы относятся к определённому типу данных. В таблице ниже приведены типы данных, используемые в VBA, с описанием и диапазоном возможных значений:

Тип данных Размер Описание Диапазон значений
Byte 1 байт Положительные целые числа; часто используется для двоичных данных от 0 до 255
Boolean 2 байта Может принимать значения либо True, либо False True или False
Integer 2 байта Целые числа (нет дробной части) от -32 768 до +32 767
Long 4 байта Большие целые числа (нет дробной части) от -2 147 483 648 до +2 147 483 647
Single 4 байта Число с плавающей точкой одинарной точности от -3.4e38 до +3.4e38
Double 8 байт Число с плавающей точкой двойной точности от -1.8e308 до +1.8e308
Currency 8 байт Число с плавающей точкой, с фиксированным количеством десятичных разрядов от -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Date 8 байт Дата и время – данные типа Date представлены числом с плавающей точкой. Целая часть этого числа выражает дату, а дробная часть – время от 1 Января 100 до 31 Декабря 9999
Object 4 байта Ссылка на объект Любая ссылка на объект
String изменяется Набор символов. Тип String может иметь фиксированную или изменяющуюся длину. Чаще используется с изменяющейся длиной Фиксированной длины – приблизительно до 65 500 символов. Переменной длины – приблизительно до 2 миллиардов символов
Variant изменяется Может содержать дату, число с плавающей точкой или строку символов. Этот тип используют в тех случаях, когда заранее не известно, какой именно тип данных будет введён Число – Double, строка – String

Очевидно, что пользуясь приведённой выше таблицей и правильно выбирая тип данных, можно использовать память более экономно (например, выбрать тип данных Integer вместо Long или Single вместо Double). Однако, используя более компактные типы данных, нужно внимательно следить за тем, чтобы в коде не было попыток уместить в них не соразмерно большие значения.

Объявление переменных и констант

Примечание переводчика: Говоря о переменных в VBA, стоит упомянуть ещё один очень важный момент. Если мы объявляем переменную, но не присваиваем ей какое-либо значение, то она инициализируется значением по умолчанию:
• текстовые строки – инициализируются пустыми строками;
• числа – значением 0;
• переменные типа Boolean – False;
• даты – 30 декабря 1899.

Прежде чем использовать переменную или константу, её нужно объявить. Для этого в макрос добавляют вот такую простую строку кода:

Dim Имя_Переменной As Тип_Данных

В показанной выше строке кода Имя_Переменной – это имя переменной, которая будет использована в коде, а Тип_Данных – это один из типов данных из таблицы, приведённой чуть ранее в этой статье. Например:

Аналогично объявляются константы, но при объявлении констант обязательно сразу указывается их значение. Например, вот так:

Объявлять переменные в Excel не обязательно. По умолчанию все введённые, но не объявленные переменные в Excel будут иметь тип Variant и смогут принять как числовое, так и текстовое значение.

Таким образом, программист в любой момент сможет использовать новую переменную (даже если она не была объявлена), и Excel будет рассматривать её как переменную типа Variant. Однако, есть несколько причин, почему так поступать не следует:

  1. Использование памяти и скорость вычислений. Если не объявлять переменную с указанием типа данных, то по умолчанию для неё будет установлен тип Variant. Этот тип данных использует больше памяти, чем другие типы данных.Казалось бы, несколько лишних байт на каждую переменную – не так уж много, но на практике в создаваемых программах могут быть тысячи переменных (особенно при работе с массивами). Поэтому излишняя память, используемая переменными типа Variant, по сравнению с переменными типа Integer или Single, может сложится в значительную сумму.К тому же, операции с переменными типа Variant выполняются гораздо медленнее, чем с переменными других типов, соответственно лишняя тысяча переменных типа Variant может значительно замедлить вычисления.
  2. Профилактика опечаток в именах переменных. Если все переменные объявляются, то можно использовать оператор VBA – Option Explicit (о нём расскажем далее), чтобы выявить все не объявленные переменные.Таким образом исключается появление в программе ошибки в результате не верно записанного имени переменной. Например, используя в коде переменную с именем sVAT_Rate, можно допустить опечатку и, присваивая значение этой переменной, записать: “VATRate = 0,175”. Ожидается, что с этого момента, переменная sVAT_Rate должна содержать значение 0,175 – но, конечно же, этого не происходит. Если же включен режим обязательного объявления всех используемых переменных, то компилятор VBA сразу же укажет на ошибку, так как не найдёт переменную VATRate среди объявленных.
  3. Выделение значений, не соответствующих объявленному типу переменной. Если объявить переменную определённого типа и попытаться присвоить ей данные другого типа, то появится ошибка, не исправив которую, можно получить сбой в работе программы.На первый взгляд, это может показаться хорошей причиной, чтобы не объявлять переменные, но на самом деле, чем раньше выяснится, что одна из переменных получила не те данные, которые должна была получить – тем лучше! Иначе, если программа продолжит работу, результаты могут оказаться неверными и неожиданными, а найти причину ошибок будет гораздо сложнее.Возможно также, что макрос будет “успешно” выполнен. В результате ошибка останется незамеченной и работа продолжится с неверными данными!

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

Option Explicit

Оператор Option Explicit заставляет объявлять все переменные, которые будут использованы в коде VBA, и при компиляции выделяет все не объявленные переменные как ошибки (прежде чем будет запущено выполнение кода). Применить этот оператор не сложно – просто запишите в самом верху файла VBA такую строку:

Если хотите всегда вставлять Option Explicit в начало каждого нового созданного модуля VBA, то это можно делать автоматически. Для этого необходимо включить параметр Require Variable Declaration в настройках редактора VBA.

Это делается так:

  • В меню редактора Visual Basic нажмите Tools >Options
  • В появившемся диалоговом окне откройте вкладку Editor
  • Отметьте галочкой параметр Require Variable Declaration и нажмите ОК

При включенном параметре строка Option Explicit будет автоматически вставляться в начало каждого нового созданного модуля.

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

Каждая объявленная переменная или константа имеет свою ограниченную область действия, то есть ограниченную часть программы, в которой эта переменная существует. Область действия зависит от того, где было сделано объявление переменной или константы. Возьмём, к примеру, переменную sVAT_Rate, которая используется в функции Total_Cost. В следующей таблице рассмотрены два варианта области действия переменной sVAT_Rate, объявленной в двух различных позициях в модуле:

Если переменная sVAT_Rate объявлена в самом начале модуля, то областью действия этой переменной будет весь модуль (т.е. переменная sVAT_Rate будет распознаваться всеми процедурами в этом модуле).

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

Однако, если будет вызвана какая-то функция, расположенная в другом модуле, то для неё переменная sVAT_Rate будет не известна.

Если переменная sVAT_Rate объявлена в начале функции Total_Cost, то её область действия будет ограничена только этой функцией (т.е. в пределах функции Total_Cost, можно будет использовать переменную sVAT_Rate, а за её пределами – нет).

При попытке использовать sVAT_Rate в другой процедуре, компилятор VBA сообщит об ошибке, так как эта переменная не была объявлена за пределами функции Total_Cost (при условии, что использован оператор Option Explicit).

В показанном выше примере переменная объявлена на уровне модуля при помощи ключевого слова Dim. Однако, бывает необходимо, чтобы объявленными переменными можно было пользоваться в других модулях. В таких случаях для объявления переменной вместо ключевого слова Dim нужно использовать ключевое слово Public.

Кстати, для того, чтобы объявить переменную на уровне модуля, вместо ключевого слова Dim можно использовать ключевое слово Private, которое укажет на то, что данная переменная предназначена для использования только в текущем модуле.

Для объявления констант также можно использовать ключевые слова Public и Private, но не вместо ключевого слова Const, а вместе с ним.

В следующих примерах показано использование ключевых слов Public и Private в применении к переменным и к константам.

Dim в vba что это

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

Параметры
WithEvents
Необязательный. Ключевое слово, указывающее, что имяПеременной является объектной переменной, которая используется при отклике на события, генерируемые объектом ActiveX. Применяется только в модулях класса. Пользователь имеет возможность описать с помощью ключевого слова WithEvents произвольное количество отдельных переменных, однако при этом не допускается создание массивов. Не допускается также использование ключевого слова New с ключевым словом WithEvents.
имяПеременной
Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.
индексы
Необязательный. Размерности переменной массива; допускается описание до 60 размерностей. Для задания аргумента индексы используется следующий синтаксис:

Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю.
New
Необязательный. Ключевое слово, включающее возможность неявного создания объекта. Если указано ключевого слова New при описании объектной переменной, новый экземпляр объекта создается при первой ссылке на объект, поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set. Ключевое слово New нельзя использовать для описания переменных любых внутренних типов данных, для описания экземпляров зависимых объектов, а также вместе с ключевым словом WithEvents. тип
Необязательный. Тип данных переменной; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (для строк переменной длины), String* длина (для строк фиксированной длины), Object, Variant, определяемый пользователем тип или объектный тип. Для каждой описываемой переменной следует использовать отдельное предложение As тип.

Замечания Переменные, описанные с помощью ключевого слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре.
Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом Integer.

Инструкция Dim предназначена также для описания объектного типа переменных. Далее приводится описание переменной для нового образца листа электронной таблицы.

Если при описании объектной переменной не используется ключевое слово New, то для использования объекта, на который ссылается переменная, существующий объект должен быть с помощью инструкции Set присвоен переменной. До присвоения объекта описанная объектная переменная имеет специальное значение Nothing, которое указывает, что она не содержит ссылку на какой-либо определенный экземпляр объекта.
Имеется также возможность применять инструкцию Dim с пустыми скобками для описания динамического массива. После описания динамического массива, воспользуйтесь инструкцией ReDim в процедуре для определения числа размерностей и элементов массива. При попытке переопределить размерности переменной-массива, чей размер был явно указан в инструкции Private, Public или Dim, возникает ошибка.
Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant.
При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки («»), а строка фиксированной длины заполняется нулями. Переменные типа Variant получают при инициализации значение Empty. Каждый элемент переменной определяемого пользователем типа при инициализации получает значение, которые он получил бы, если бы являлся отдельной переменной.
При использовании инструкции Dim в процедуре ее обычно помещают в начало процедуры.

Пример
В данном примере инструкция Dim используется для объявления переменных и массивов. По умолчанию нижняя граница индексов массива равняется 0; для ее изменения следует использовать инструкцию Option Base на уровне модуля.

Оператор описания переменной

Оператор описания переменной

В PascalABC.NET можно описывать переменные внутри составного оператора begin-end в специальном операторе описания переменной. Такие описания называются внутриблочными.

Внутриблочное описание имеет одну из форм:

список имен: тип;

или

имя: тип := выражение;

или

имя: тип = выражение; // Для совместимости с Delphi

или

имя := выражение;

Имена в списке перечисляются через запятую. Например:

begin

var a1,a2,a3: integer;

var n: real := 5;

var s := ;

В последнем случае тип переменной автовыводится по типу выражения в правой части. Автовыведение типа активно используется при инициализации переменной вызовом конструктора или функции. возвращающей объект:

begin

var l := new List<integer>;

var a := Seq(1,3,5); // тип a выводится по типу возвращаемого значения Seq: array of integer

Автовыведение типа при описании невозможно при инициализации переменной лямбда-выражением:

// var f := x -> x*x; // так нельзя!

var f : Func<integer,integer> := x -> x*x;

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

Читайте также

Переполнение переменной jiffies

Переполнение переменной jiffies
Переменная jiffies, так же как и любое целое число языка программирования С, после достижения максимально возможного значения переполняется. Для 32-разрядного беззнакового целого числа максимальное значение равно 2??- 1. Поэтому перед тем как

Операции над условной переменной

Операции над условной переменной

Параметры условной переменной
Инициализация параметровint pthread_condattr_init(pthread_condattr_t* attr);Функция инициализирует структуру атрибутов условной переменной, на которую указывает параметр attr. Структура данных pthread_condattr_t определена в файле

var — Объявление локальной переменной

var — Объявление локальной переменной
varИспользуется для объявления локальных переменныхСинтаксис:var variableName1 [= value1] […,variableNameN [=valueN]];Аргументы:Описание:Создание переменной называется ее объявлением. Объявление — это этап формального создания переменной. Когда впервые

Правило 52: Если вы написали оператор new с размещением, напишите и соответствующий оператор delete

Правило 52: Если вы написали оператор new с размещением, напишите и соответствующий оператор delete
Операторы new и delete с размещением встречаются в C++ не слишком часто, поэтому в том, что вы с ними не знакомы, нет ничего страшного. Вспомните (правила 16 и 17), что когда вы пишете такое

1. Оператор Select – базовый оператор языка структурированных запросов

1. Оператор Select – базовый оператор языка структурированных запросов
Центральное место в языке структурированных запросов SQL занимает оператор Select, с помощью которого реализуется самая востребованная операция при работе с базами данных – запросы.Оператор Select

Объявление простой переменной

Объявление простой переменной
Синтаксис:&lt;спецификация типа&gt; &lt;идентификатор&gt; [,&lt;идентификатор&gt;…];Объявление простой переменной определяет имя переменной и ее тип. Имя переменной задается &lt;идентификатором&gt;. &lt;Спецификация типа&gt; задает тип переменной. Тип

3.2.2. Имя переменной

3.2.2. Имя переменной
Имя переменной, или идентификатор, может состоять из латинских букв, цифр и символа подчеркивания. Прописные и строчные буквы в именах различаются. Язык С++ не ограничивает длину идентификатора, однако пользоваться слишком длинными именами типа

15.8.2. Оператор размещения new() и оператор delete()

15.8.2. Оператор размещения new() и оператор delete()
Оператор-член new() может быть перегружен при условии, что все объявления имеют разные списки параметров. Первый параметр должен иметь тип size_t:class Screen {public:void *operator new( size_t );void *operator new( size_t, Screen * );// …};Остальные параметры

Пример 9-15. Длина переменной

Пример 9-15. Длина переменной
#!/bin/bash# length.shE_NO_ARGS=65if [ $# -eq 0 ] # Для работы скрипта необходим хотя бы один входной параметр.then echo «Вызовите сценарий с одним или более параметром командной строки.» exit $E_NO_ARGSfivar01=abcdEFGH28ijecho «var01 = ${var01}»echo «Length of var01 = ${#var01}»echo «Количество входных

Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной

Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной
#!/bin/bash# Подстановка команд в «case».case $( arch ) in # команда «arch» возвращает строку, описывающую аппаратную апхитектуру.i386 ) echo «Машина на базе процессора 80386»;;i486 ) echo «Машина на базе

Пример 11-15. «Сброс» переменной

Пример 11-15. «Сброс» переменной
#!/bin/bash# unset.sh: Сброс переменной.variable=hello # Инициализация.echo «variable = $variable»unset variable # Сброс. # Тот же эффект дает variable=echo «(unset) variable = $variable» # $variable = null.exit 0exportКоманда export экспортирует переменную, делая ее

14.2.1. Отображение значения переменной

14.2.1. Отображение значения переменной
Чтобы отобразить значение отдельной переменной, достаточно применить команду echo и предварить имя переменной знаком $. Рассмотрим несколько примеров.$ GREAT_PICTURE=»die hard» $ echo ${GREAT_PICTURE}die hard$ DOLLAR=99$ echo $(DOLLAR)99$ LAST_FILE=ZLPSO.txt $ echo

14.2.2. Удаление значения переменной

14.2.2. Удаление значения переменной
Чтобы удалить значение переменной, достаточно применить команду unset: unset имя_переменной$ PC=enterprise $ echo ${РС} enterprise $ unset PC $ echo ${PC)

17.5.1. Приращение переменной цикла

17.5.1. Приращение переменной цикла
Команда expr выполняет приращение переменной цикла. Сначала переменной цикла присваивается начальное значение нуль. Затем добавляется единица. Кавычки применяются для обозначения подстановки команд. Выводимые данные, полученные с

Понравилась статья? Поделить с друзьями:
  • Какая инструкция объединяет последовательность инструкций insert update delete
  • Какая инструкция должна быть первой при описании условного алгоритма
  • Какая инструкция выполняет эквидистантную коррекцию справа по направлению подачи
  • Какая инструкция выполняет линейную интерполяцию при ускоренном перемещении
  • Какая инструкция была до 28 и