Главная страница

Е. А. Рябухина, О. А. Гущина, Д. А. Губанов, Д. В. Емельянов


Скачать 3.08 Mb.
НазваниеЕ. А. Рябухина, О. А. Гущина, Д. А. Губанов, Д. В. Емельянов
Дата17.05.2023
Размер3.08 Mb.
Формат файлаdoc
Имя файлаVBA.doc
ТипДокументы
#1138184
страница1 из 11
  1   2   3   4   5   6   7   8   9   10   11


Е.А. Рябухина, О.А. Гущина,

Д.А. Губанов, Д.В. Емельянов

«Основы программирования на VBA»

2016

1. Форматирование не менять!!!

2. Не исправлять символы (нАПРИМЕР «»)
Язык Visual Basic for Applications (VBA) является объектно-ориентированным языком программирования, т.е. позволяет работать с достаточно сложными структурами данных. Вместе с тем конструкции языка достаточно просты для понимания и, кроме того, VBA является встроенным языком Microsoft Office, что позволяет эффективно использовать возможности данных приложений.
1. Алфавит языка VBA
В алфавит языка VBA входят:

1) латинские буквы (прописные и строчные);

2) арабские цифры от 0 до 9;

3) знаки арифметических действий + (сложение), - (вычитание), * (умножение), / (деление), \ (целочисленное деление), ^ (возведение в степень);

4) знаки логических отношений >, <, =. Знаки логических отношений , , ≠ представляются двумя символами соответственно >=, <=, <>;

5) специальные символы (точка), , (запятая), : (двоеточие), _ (подчеркивание), (кавычки), (апостроф), ( и ), пробел, %, $, &, !, #, @.
2. Типы данных VBA
В VBA существуют следующие типы данных:

1. дата;

2. число;

2.1. целое число;

2.2. число с плавающей точкой;

2.3. число с фиксированной точкой;

3. текстовая строка;

4. логическое данное;

5. вариант.
2.1. Дата
VBA использует тип Дата (Date) для хранения дат и времени.

При работе с этим типом данных следует иметь в виду, что VBA-типы Date не являются такими же типами, как в рабочих листах Excel, хотя во многом и схожи с ними. Например, базовой датой для VBA-типа Date является 30 декабря 1899 года, а в Excel – 1 января 1900 года.

VBA-тип Date является типом последовательных дат. VBA использует отрицательные числа для представления дат ранее базовой даты (30 декабря 1899), и положительные – для дат после базовой. Число 0 представляет саму дату 30.12.1899.

В значении последовательной даты целая часть – это общее число дней от базовой даты. Дробная часть (цифра справа от десятичного знака) – эти цифры обозначают время дня как часть дня. Один час – это 1/24 дня, одна минута – 1/1440 дня, секунда – 1/86400 дня.

Можно вычитать одну дату из другой, добавлять к дате или вычитать числа для изменения ее значения. В VBA имеется несколько встроенных процедур для отдельного извлечения года, месяца, дня, часов, минут и секунд переменной типа Date.
2.2. Число
VBA имеет шесть различных численных типов данных: Byte, Integer, Long, Single, Double, Currency. Они используются для хранения чисел в различных форматах, в зависимости от конкретного типа.
2.2.1. Целое число
Под целым числом подразумевается число без дробной части (целые числа никогда не содержат десятичного знака, даже если десятичная часть равна нулю). VBA предоставляет три типа целых данных: Byte, Integer, Long.

Byteнаименьший из трех типов целых данных, предназначен для хранения числе от 0 до 255.

Тип Integer использует диапазон целых чисел от -32768 до 32767.

Тип Long использует диапазон целых чисел от -2147483648 до 2147483647.

Целые типы Byte, Integer, Long требуют меньше памяти для хранения чисел, чем другие численные типы данных VBA, а математические операции и операции сравнения над числами указанных типов быстрее, чем эти же операции для численных типов данных с плавающей точкой. VBA автоматически преобразует данные типов Byte, Integer, Long в текст, когда они выводятся на экран, используя такие процедуры, как MsgBox.
2.2.2. Число с плавающей точкой
Числа с плавающей точкой могут иметь любое число цифр до или после десятичной точки (в пределах границ конкретного типа данных). Иногда их называют действительными числами. Этот тип данных используют тогда, когда требуется хранить числа, имеющие дробную часть.

VBA имеет два типа данных с плавающей точкой: Single, Double.

Тип Single используется для хранения отрицательных чисел от -3,402823*1038 до -1,401298*10-45 и положительных от 1,401298*10-45 до 3,402823*1038. Числа, хранимые с использованием типа Single, называются числами одинарной точности.

Тип Double используется для хранения отрицательных чисел от -0,79769313486232*10308 до -4,94065645841247*10-324 и положительных от 4,94065645841247*10-324 до 1,79769313486232*10308.

Числа, хранимые с использованием типа Double, называются числами двойной точности.

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

В экспоненциальном представлении значения записываются без начальных и конечных нулей, и слева от десятичного знака имеется только одна цифра. Число умножается на 10 в некоторой степени, чтобы показать, где на самом деле находится десятичный знак. Следует помнить, что отрицательная степень приводит в результате к меньшему числу, а положительная – к большему. Вместо надстрочного символа показателя степени используется буква Е. Например:

4.1Е3=4100

2.01Е-2=0.0201
2.2.3. Число с фиксированной точкой
Тип данных Currency используется для чисел с фиксированной точкой, т.е., десятичная точка всегда находится в одном и том же месте – справа от точки всегда имеются четыре цифры. Этот тип данных используется при денежных вычислениях, когда требуется высокая точность.

Currency хранит числа в диапазоне от -922337203685477,5808 до 922337203685477,5807.
2.3. Текстовая строка
Любые текстовые данные, сохраняемые в VBA, называются строками. Для их хранения предназначен тип данных String.

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

Существует две категории строк: строки переменной длины и строки фиксированной длины. По умолчанию в VBA все строки переменной длины.

Следует сказать, что тип данных String является очень важным типом, т.к., как правило, информация, вводимая пользователем – это строковые данные. Кроме того, поскольку на экране монитора отображается только текст, то все другие типы данных должны быть преобразованы в строковые данные перед выводом на экран.
2.4. Логическое данное
Любое условие может принимать два значения: True (Истина) или False (Ложь). Логические значения True и False называются булевскими значениями, а тип данных – Boolean.

Булевские значения получают как результат операции сравнения. Операции сравнения имеет место при сравнении одного с другим, например, при сравнении двух чисел для определения, которое из них больше.
2.5. Вариант
Вариант (Variant) – это особый тип данных, который может сохранять любые типы, за исключением типа Object. VBA использует этот тип данных для всех переменных, если только они не объявлены явно.

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

Несмотря на то, что типы Variant удобны и избавляют от некоторой части работы при написании кода, они требуют большего объема памяти, чем любой другой тип данных, за исключением больших строк. Кроме того, математические операции и операции сравнения над данными типа Variant выполняются медленнее, чем подобные операции над данными любого другого типа. Следует избегать использования переменных Variant.
3. Переменные VBA
Переменная – это имя, которое программист дает области компьютерной памяти, используемой для хранения данных какого-либо типа.

При выборе имени переменной необходимо соблюдать определенные правила:

– имя переменной должно начинаться с буквы алфавита;

– имена переменных содержат латинские буквы, цифры и знак подчеркивания;

– имена переменных не могут превышать 255 символов;

– имя переменной должно быть уникальным в рамках его области действия. Имя переменной не может дублировать зарезервированные ключевые слова VBA;

– имена переменных не чувствительны к состоянию регистра. Т.е. нет разницы между MyNumber, mynumber, mYnUmBeR.

Хорошим тоном программирования считается, когда именам переменным даются осмысленные названия, отражающие их суть в производимых программой операциях. Например, логично будет, если переменная, содержащая итоговую сумму, будет иметь название "Sum". Вместе с тем, имена переменных должны быть достаточно короткими, что позволяет избежать ошибок при их написании.

Примеры правильного написания имен переменных: SUMMA, A1, SRED_ZNACH.

Примеры неправильного написания имен переменных: Я24 (содержит буку русского алфавита), SR-ZNACH (содержит недопустимый символ), 67FGJ (начинается не с буквы).

Самым простым способом создания переменной является использование ее в операторе VBA. При этом VBA создает переменную и резервирует память для переменной. Сохранение значения данных в переменной называется присваиванием переменной. Делается это с помощью оператора присваивания (=).

Например: Sum=120.

Этот оператор сохраняет численное значение 120 в ячейке памяти, заданной переменной Sum.

Такое объявление переменной называется неявным объявлением переменной. Все переменные, которые VBA создает подобным образом, имеют тип данных Variant.

Неявное объявление переменной может вызвать массу проблем во время отладки программного кода, поэтому, такой способ программирования не рекомендуется. В некоторых языках программирования, например в языке Pascal (ПАСКАЛЬ), вообще нельзя объявлять переменные неявным способом.

В связи с этим VBA предоставляет возможность выполнить явное объявление переменной. Это несет следующие преимущества:

– ускоряется выполнение кода;

– уменьшается количество потенциальных ошибок при написании кода;

– улучшается читабельность программного кода;

– нормализуется выделение заглавными буквами в имени переменной (т.е., если вы явно объявили имя переменной как AllSumm, то при написании в теле кода этой переменной, как allsumm, автоматически произойдет замена на AllSumm)

Для явного объявления переменной используется оператор Dim, имеющий формат.

Dim V1 As T1, V2 As T2, V3 As T3, …

Здесь V1, V2, …Vn – имена переменных, T1, T2, T3… – типы переменных соответственно.

Пример:

Dim A As Byte, S As single, N As Integer

Следует отметить, что при использовании описания вида DimV1, V2,…Vn As Tуказанный тип T принимает только последняя переменная Vn, а остальные имеют более общий тип.

Пример:

Sub k()

Dim a, c, b As Byte

a = 6

b = 8

c = 100

End Sub


В результате выполнения программы тип Byte принимает только переменная b, а переменные a и c имеют тип Integer (в этом можно убедиться, применив функцию VarType – см. далее).

В современных версиях VBA (начиная с VBA 2008) все переменные, описанные указанным способом имеют один и тот же тип T.

Когда VBA создает новую переменную, эта переменная инициализируется (переменной присваивается некоторое значение «по умолчанию»):

строки инициализируются пустыми строками;

– числа – значением 0;

– переменные типа BooleanFalse;

– даты – 30 декабря 1899.

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

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

Кроме оператора Dim тип переменных можно определить следующими способами:

– с помощью суффиксов;

– с помощью префиксов;

– c помощью оператора DefТype.

С помощью суффикса переменная описывается в виде:

Name% – целый тип Integer;

Name& – тип Long;

Name@ – тип Currency;

Name! – тип Single;

Name# – тип Double;

Name$ – тип String.

Здесь Name – имя переменной.

Например, A$ – строковая переменная, Sum! – вещественная переменная типа Single, B1% – переменная типа Integer.

При использовании суффикса достаточно указать его только при первом обращении к переменной.

Пример:

Sub p()

W%=1

W=W+5

End Sub


При использовании префикса переменная описывается в виде PrefName, где Pref – префикс, Name – имя переменной.

Префиксы имеют следующий вид:

bln – тип Boolean;

byt – тип Byte;

cur – тип Currency;

int – тип Integer;

sng – тип Single;

dbl – тип Double;

lng – тип Long;

str – тип String;

dtm – тип Дата/Время;

vnt – тип Variant

Например, переменная intK будет иметь тип Integer, а переменная sngD – тип Single. В отличие от суффиксов, переменная с префиксом требует постоянного указания префикса на протяжении программы.

Пример:

Sub p()

IntW=1

W=W+5

EndSub


Так, в результате выполнения фрагмента программы переменная W примет значение не 6, а 5, поскольку при обращении к переменной без префикса, она принимает значение 0.

Оператор объявления типа DefType имеет вид:

DefType буква1-букваN,…

где Type определяет тип переменных, имена которых начинаются с букв из интервала [буква1; букваN].

Параметр Type принимает следующие значения:

Int – тип Integer;

Lng – тип Long;

Byte – тип Byte;

Bool – тип Boolean;

Sng – тип Single;

Dbl– тип Double;

Str – тип String;

Date – тип Data;

Var – тип Variant.

Так, например, при использовании оператора DefintA-C,P-Sпеременные А1, ALFA, Beta, B25, CPZ, POL, Summa, Q2, Result будут относиться к типу Integer.

В настоящее время этот способ употребляется достаточно редко, поскольку он не сочетается с оператором OptionExplicit.

Таким образом, наиболее удобными способами описания переменных в одном модуле являются явный – с помощью оператора Dim и с помощью суффиксов.
  1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта