Оператор DIM

Если в задаче обрабатываемые данные организуются в виде массивов, в этом случае интерпретатору требуется сообщить информацию, необходимую для распределения памяти под массивы, используемые в программе. Для этого используется оператор DIM.

Формат: DIM a1(m1), a2(m2),..., aN (mN)

ai - имя массива;

mi - список параметров, задающих максимальные значения индексов массива. Список mi может содержать одну или две целые константы или переменные, разделенные за пятыми, а также арифметические выражения. Индексы из меняются от 0 до максимального.

Пример: DIM A(4), B(5,8), A1$(5), B1$(3,4)

Оператор DIM описывает числовые массивы A и B, символьные массивы A1$ и B1$. Массив A одномерный и содержит 5 элементов A(0), A(1), A(2), A(3), A(4). Двумерный числовой массив B содержит 6 строк и 9 столбцов. Символьный одномерный массив A1$ состоит из 6 элементов. Символьный двумерный массив B1$ состоит из 20 элементов (4 строки, 5 столбцов).

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

Если в одномерном массиве не более 11 элементов, а в двумерном не более 11 строк и 11 столбцов, то такие массивы можно не описывать.

В качестве максимальных индексов можно использовать имена переменных. Но значения переменным должны быть присвоены до оператора DIM.

Пример 1: Пример 2:

10 INPUT N,K 10 INPUT N,М

20 DIM A(N),B(K,N) 20 DIM A(N+1,М)

Пример 3: Даны одномерные массивы A и B, содержащие по N элементов. Сформировать новый массив D, каждый элемент которого определяется по формуле

D(i)=A(i)+B(i)+C(i), i=1,2,.....,N

10 INPUT "Введите размерность массивов" ;N

20 DIM A(N),B(N),C(N),D(N)

40 INPUT A(I),B(I),C(I)

70 D(I)=A(I)+B(I)+C(I)

80 PRINT "D(";I;")=";D(I);

Блоки данных

а) Оператор DATA

Оператор DATA предназначен для создания блока данных.

Формат: DATA A

DATA - ключевое слово;

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

Оператор DATA создает в оперативной памяти ЭВМ блок данных. Информация в блок данных записывается в том порядке, в котором она располагается в списке. Если в программе используется не сколько операторов DATA, то формируется блок данных путем последовательного сцепления значений из списков в порядке появления операторов.

Пример: 20 DATA 2, 5.6, программа

........................

50 DATA 8, пример, 37.6, 5

В блоке данных будет 7 элементов: 2, 5.6, программа, 8, пример, 37.6, 5

Б) оператор READ

Для чтения информации из блока данных предназначен оператор READ.

Формат: READ V

READ - ключевое слово;

V - список имен одной или более переменных, разделенных запятыми.

Блок данных организован таким образом, что обеспечивает последовательный доступ к хранящейся в нем информации с помощью внутреннего указателя. Текущее положение указателя показывает на элемент блока данных, который непосредственно доступен для чтения. При запуске программы указатель устанавливается на начальный элемент блока. При работе оператора READ первый элемент блока данных из списка оператора DATA присваивается в качестве значения переменной, имя которой расположено первым в списке оператора READ, а указатель смещается на следующую позицию и указывает теперь на второй элемент блока данных. Если в списке оператора READ имеется еще одно имя переменной, то второй элемент будет присваиваться ей в качестве значения. Затем указатель перемещается на следующую позицию, и процесс повторяется до тех пор, пока список оператора READ не закончится.

По окончании списка указатель будет установлен на элемент блока данных, следующий за последним считанным значением. Если в программе встретится еще один оператор READ, то присвоение элементов из блока данных переменным из списка оператора READ будет производиться, начиная с текущего положения указателя.

Пример: 30 READ A, B

100 READ E$, F, G

A = 2 B = 5.6 C = "программа"

D = 8 E = "пример" F = 37.6 G = 5

DATA - единственный оператор языка BASIC, номер строки которого не влияет на порядок выполняемых действий. Номер строки нужен лишь для того, чтобы был выдержан общий формат программы.

Только оператор READ определяет, когда и какие данные должны быть считаны.

в) Оператор RESTORE

Для возврата указателя в начало блока данных служит опера тор RESTORE.

Формат: RESTORE или RESTORE N

N - номер строки, содержащей оператор DATA.

Использование этого оператора позволяет многократно считывать одни и те же данные различными операторами DATA и присваивать их в качестве значений разным переменным.

40 DATA 2, 4, 8, 3, -6, 4

A = 2, A1 = 4, A2 = 8, указатель на числе 3, но RESTORE возвращает его на первое число, таким образом B = 2, B1 = 4 .

Если в операторе RESTORE указать номер строки, содержащей оператор DATA, то указатель отметит первое значение. После того как RESTORE изменит положение указателя, любой последующий READ начнет чтение данных с новой указанной позиции.

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

Подпрограммы языка basic

а) Операторы GOSUB и RETURN

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

В языке BASIC обращение к подпрограмме осуществляется оператором GOSUB.

Формат: GOSUB N

GOSUB - ключевое слово;

N - номер первой строки, с которой должно начаться выполнение подпрограммы (точка входа в подпрограмму).

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

Работа операторов GOSUB и RETURN происходит следующим образом. Интерпретатор языка BASIC формирует стек возврата. Когда в программе встречается оператор GOSUB, интерпретатор заносит в стек возврата адрес (номер строки) оператора, следующего непосредственно за GOSUB. Затем управление передается на точку входа, заданную номером строки в операторе GOSUB, и начинают выполняться операторы подпрограммы. Если в подпрограмме встречается оператор RETURN, то из вершины стека извлекается текущий адрес возврата, и интерпретатор передает управление в вызывающую программу на оператор, непосредственно следующий за оператором GO SUB.

Пример: Имеются данные о посевных площадях пшеницы в хозяйствах района. Требуется определить количество хозяйств, в которых площадь больше некоторой за данной величины.

10 REM основная программа

30 PRINT "Введите количество хозяйств"

60 PRINT "Введите посевную площадь в хозяйстве" ;I

90 PRINT "Введите нижнюю границу посевной площади" 100 INPUT D

120 PRINT "Количество хозяйств с посевной площадью >"; D;"=" ; K

200 REM Подпрограмма

220 FOR I=1 TO M

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

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

Dim nMyAge As Integer

nMyAge = nMyAge + 10

MsgBox nMyAge

Dim nMyAge As Integer

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

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

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

Static nVar1 As Integer

nVar1 = nVar1 + 1

MsgBox nVar1

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

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

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

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

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

MsgBox objMyDocument.Name

Sub CheckDateSub()

COMPANY_NAME

Многие программисты используют такой подход для обозначения констант и сейчас (но использование ключевого слова 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, а во второй строке написать:

nVar1% = nVar1% + 1

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

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

Dim nVar1

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

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

nVar1 = nVar1 + 1

MsgBox nVar1

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

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

первый вариант:

Dim oWbk As Workbook

Set oWbk = Workbooks.Add()

второй вариант:

Set oWbk = Workbooks.Add()

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

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

Option Explicit

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

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

n = n + 1

MsgBox п

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

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

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

Dim n1 As Integer, s1 As String

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

nVar1 = 30

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

nVar1 = nVar1 + 1

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

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

sVar1 = "Hello";

  • значение даты/времени заключаются в "решетки" - символы фунта:

dVar1 = #05/06/2004#

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

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

nVar1 = &HFF00

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

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

В 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 Тип_Данных

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

Dim sVAT_Rate As Single Dim i As Integer

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

Const iMaxCount = 5000 Const iMaxScore = 100

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

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

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

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

Option Explicit

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

Option Explicit

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

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

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

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

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

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

Option Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function

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

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

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

Option Explicit Function Total_Cost() As Double Dim sVAT_Rate As Single ... End Function

Если переменная 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, такая операция носит название - объявления . Например:

Dim A As Integer

Dim B As String

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

Dim A As Integer, Name As Integer

Общей ошибкой является использование следующего выражения:

Dim X, Y, Z As Integer

В предположение того, все переменные будут целочисленные. Фактически X и Y будут объявлены как Variant и только Z как Integer. Чтобы избежать этого, необходимо каждый раз использовать идентификатор типа. Если переменная объявлена при помощи оператора Dim, в случае использования переменной с тем же именем и другим идентификатором типа произойдет ошибка «двойное определение» при загрузке программы.

При присвоении переменной типа Variant, можно использовать оператор - Dim без приставки - AS. Например:

Необходимость объявления переменных.

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

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

Для общей проверки переменных в программе необходимо оператор Option Explicit разместить в раздел General.

Для того чтобы разместить данный оператор в разделе General необходимо:

Открыть окно Code

Выбрать объект General из списка объектов в окне Object

Выбрать Declaration из списка Procedure

Ввести Option Explicit.

Изменение значений по умолчанию для типов

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

DefInt A-Z

Основные формы операторов различных DefType

Соглашения о типах можно всегда изменить, используя идентификатор, или оператор Dim для конкретной переменной. Обычно оператор DefType размещает в том же разделе (General), что и оператор Option Explicit.

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

Программисты применяют термин - область видимости, когда хотят сказать о возможности использования переменной из одной части программы в другой её части. В Visual Basic переменные объявление внутри процедуры является изолированными друг от друга. В терминах программирования это означает, что данные переменные являются локальными .

Английское слово DIMENSION, от которого и берется сокращение DIM, означает «размерность», «размер». Этот оператор нужен для уточнения и определения переменных, с которыми работает программа. Дело в том, что по умолчанию (так называемый default, который нехорошо ассоциируется с датой 19 августа 1998 года) QB пользуется обычными переменными одинарной точности. Если, скажем, нам понадобятся однопараметрические переменные A(I), то он их нам даст штук 10-12, а затем объявит об overflow (переполнении). Вообще говоря, оператором DIM объявляют массивы (об этом чуть позже) или определяют тип данных для немассивной переменной. Второй оператор REDIM, который можно считать дополнительным видом оператора DIM, заявляет параметры или преобразовывает параметры динамических массивов, снимая предыдущие ограничения. Формат операторов таков:

DIM variable[(subscripts)]

[,variable[(subscripts)] ]...

REDIM variable(subscripts)

[,variable(subscripts) ]...

Дадим некоторые комментарии. Здесь

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

variable это имя переменной или массива.

subscripts размеры массива, указываемые в формате:

[нижний TO] верхний [,[нижний TO] верхний]...

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

AS type объявляет тип данных массива или переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING, или же указывается тип данных, определяемых самим пользователем).

В операторе DIM объявляют также и характер (статический или динамический) массива. Если способ хранения массива не указывается явно как $STATIC, $DYNAMIC, или COMMON, массивы с цифрами вместо индексов являются статическими, а массивы в DIM с символьными переменными являются динамическими. Оператор REDIM всегда объявляет динамические массивы. Режим статических массивов автоматически заявлен при запуске программы и таким и остается. Хранение динамических массивов происходит в памяти машины во время выполнения программы.

Вернемся к программе, считающей факториал. Добавим в ней такие строки

dim fkt as double

if i<25 then goto 20

print i;“! = ”fkt

Вот теперь для того, чтобы заставить программу «заткнуться» от переполнения, нужно взять весьма большое число, например 171.

Еще одно дополнение. Для экономии памяти машины, часто используют такую возможность, заложенную в QB, как приписывание знака % (процент) к имени числовой переменной для того, чтобы она была заявлена в программе, как целое число. Таким образом, наша последняя программа с учетом такого способа описания целых переменных будет выглядеть так:

dim fkt as double

if i%<25 then goto 20

print i%;“! = ”fkt

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