Программа на VBA – это последовательность операторов.
При составлении программ следует придерживаться ряда соглашений. Так, на одной строке можно разместить несколько операторов. Между операторами в одной строке ставится двоеточие.
Любую строку можно разбить на две, расположив в конце первой знаки символов «Пробел» + «Знак подчеркивания» (_), в этом случае вторая строка будет считаться продолжением первой.
Для того, чтобы сделать программу легко читаемой используют комментарии. В языке VBA существуют два способа ввода комментариев: применение апострофа (‘), который можно поставить в любом месте строки, и зарезервированное слово Rem вместо апострофа.
1. Оператор Dim предназначен для объявления типов переменных.
1. Dim A As Integer – переменная A объявляется как целое, т.е. в ней будут храниться только целые величины .
2. Dim D As Date – объявляется переменная D для хранения дат.
3. Dim Фамилия, Наименование As String – объявлютсяпеременные. Фамилия и Наименование, предназначеные для хранения текста.
4. Dim B(12) As Integer – объявляется одномерный массив (вектор), состоящий из 12 целых чисел, причем по умолчанию первый элемент массива будет B(0), а последний B(12).
5. Dim B(3,3) As Single – объявляется двумерный массив 3х3 (матрица), состоящий из действительных чисел.
Если не указан тип переменной, то по умолчанию используется тип Variant. Однако указание конкретного типа переменной делает программу надежнее и убыстряет ее работу, т.к. VBA не требуется тратить время на распознавание необъявленной переменной при каждом обращении к ней.
Если размер массива M заранее не известен и определяется в ходе программы, то при описании массива число элементов не указывается, и массив определяется так:
Dim M() As Integer
После определения числа элементов массива, например, N, необходимо записать оператор
2. Оператор присваивания предназначен для присваивания переменной какого-либо значения.
Синтаксис:
Переменная (или свойство объекта) = выражение.
1. а=5 – переменной А присвоить значение 5 ;
2. b=«Менеджер» – переменной b присвоить значение «Менеджер» ;
· Адрес=Sheets("Организации").Cells(2,2) – переменной Адрес присвоить содержимое ячейки B2, которая находится на листе Организации в текущей рабочей книге;
· Фамилия=UserForm1.TextBox1.Text – переменнойФамилия присвоить содержимое поля TextBox1 пользовательской формы UserForm1.
o Оператор With/End with избавляет программиста от большого количества повторений имени одного и того же объекта.
Синтаксис:
With объект
оператор1
оператор2
операторN
Например, вместо последовательности операторов
UserForm1.TextBox1.Text = Date
UserForm1.TextBox2.Text = “ “
UserForm1.ComboBox1.Text = “ “
можно записать так
TextBox1.Text = Date
. TextBox2.Text = “ “
. ComboBox1.Text = “ “
REM На листе Лист1 в столбце А, начиная со второй строки, записаны ‘тарифы сотрудников. Заполним поле со списком ComboBox1 в ‘пользовательской форме UserForm1
‘Первая строка программы – на листе Лист1 в столбце А ‘подсчитывается количество заполненных ячеек, результат ‘присваивается переменной N
N=Application.CountA(Sheets(“Лист1”).Range(“A:A”)).
D=”A2:A”&Cint(N)
Sheets(“Лист1”).Range(D).Name=”Тарифы”
TextBox1.Text = Date
. TextBox2.Text = “ “
. ComboBox1.Text = “ “
. ComboBox1.Rowsource = “Тарифы “
1. Условный оператор If/Then/Else – позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие
Синтаксис:
If условие Then операторы1 [Else операторы2]
Если условие истинно, то выполняются операторы1, в противном случае выполняются операторы2.
Допускается также использование сложного условного оператора, который записывается в виде блока:
If условие1 Then
операторы1
ElseIf условие2 Then
операторы2
операторы3
Фамилия=.TextBox1.Text
If Фамилия =”“ Then MsgBox”Вы не ввели фамилию”
REM При установленном флажке номер 1 клиенту ‘предоставляется скидка 5%
‘ Сумма – количество денег, выплачиваемых клиентом
‘ Стоимость товара хранится в переменной Стоимость
If UserForm1.CheckBox1.Value = True Then
Сумма=Стоимость-Стоимость*0.05
Else Cумма=Стоимость
1) REM Предположим, что Тариф – это установленный тариф, а Время ‘–отработанное время. Время и тариф вводятся в поля ввода ‘соответственно вTextBox1 и TextBox2. Зарплата рассчитывается по ‘формуле Тариф*Время. Напишем программу для вывода в форму ‘рассчитанной зарплаты. Label4 – надпись, подготовленная для ‘вывода значения зарплаты
If IsNumeric(TextBox1.Text)=True And _
IsNumeric(TextBox2.Text)=True Then
Тариф=TextBox1.Text
Время=TextBox2.Text
Label4.Caption=Тариф*Время
В первом примере работа ведется с пользовательской формой номер один. Переменной Фамилия присваивается содержимое поля ввода номер один. Затем осуществляется проверка, было ли что-либо введено в поле ввода (не пуста ли переменная Фамилия ). Если переменная Фамилия пуста, то на экран выводится окно сообщения.
Во втором примере – первые строки, начинающиеся со слова REM и апострофов, – это комментарии, объясняющие назначения переменных. С помощью условного оператора определяется сумма, выплачиваемая клиентом.
В третьем примере осуществляется проверка того, введены ли в поля ввода числа. Если в два поля введены числа, то переменным присваиваются значения полей ввода и надписи присваивается значение результата умножения тарифа на время.
1) Оператор безусловного перехода GoTo предназначен для задания перехода на указанную строку внутри программы.
Синтаксис:
GoTo Строка
Обязательный аргумент Строка может быть любой меткой строки или номером строки.
If IsNumeric(TextBox1.Text)=False Then GoTo Ошибка
Ошибка: MsgBox “Ошибка при вводе чисел!”
В приведенном примере выполняется проверка того, введено ли число в поле ввода номер один. Если введено не число, то осуществляется переход на строку с меткой Ошибка и на экран выводится сообщение.
2) Оператор цикла For/To/Next предназначен для программирования повторяющихся фрагментов, т.е. для описания циклических алгоритмов.
Синтаксис:
For переменная=M1 To M2 [Step M3]
операторы
M1, M2, M3 – выражения. Оператор цикла повторяет выполнение группы операторов, пока переменная (счетчик) изменяется от начального значения М1 до конечного М2 с указанным шагом М3. Если шаг не указан, то он полагается равным 1.
Фамилия = Sheets(“Сотрудники”).Cells(I,1)
UserForm1.ComboBox1.AddItem Фамилия
В приведенном примере предполагается, что на листе «Cотрудники» в первом столбце записаны фамилии сотрудников, которые нужно внести в список поля со списком номер один пользовательской формы номер один. Алгоритм работы программы:
1) Переменной I присваивается значение 2.
2) Переменной Фамилия присваивается значение ячейки А(I,1), расположенной на листе «Сотрудники». (При первом выполнении цикла это ячейка А(2,1))
3) В список поля со списком ComboBox1 добавляется элемент из переменной Фамилия.
4) К значению переменной I добавляется 1 (если шаг не указан, то он полагается равным 1). Выполняется проверка, не превысила ли величина I 10 (конечного значения переменной I, в примере М3=10)? Если величина I еще меньше или равна 10, то выполняются пункты 2-4, в противном случае работа цикла заканчивается.
Таким образом, приведенная программа позволяет заполнить данными список поля со списком ComboBox1.
Основные алгоритмы, используемые при решении
экономических задач
Основные алгоритмы рассмотрим на следующем примере. В выполнении работы по договору участвовали сотрудники разных отделов. В таблице, на листе «Лист1» представлены данные о количестве отработанных часов каждым из сотрудников (рис.8).
Рис.8.Данные о количестве отработанных часов
сотрудниками фирмы
Логические операторы VBA используются для объединения результатов отдельных логических выражений, чтобы создать сложные критерии для принятия решений в процедуре (таблица Б.3).
Таблица Б.3 – Логические операторы VBA
Логический |
Синтаксис |
Имя/Описание |
||
оператор |
||||
El And E2 |
Конъюнкция . True, если оба Е1 и Е2 |
|||
имеют значение True, иначе – False |
||||
El Or E2 |
Дизъюнкция . True, если одно выра- |
|||
жение или оба (Е1 и Е2) являются |
||||
равными True; иначе – False |
||||
Not El |
Отрицание . True, если Е1 имеет зна- |
|||
чение False; False, если El является |
||||
равным True |
||||
El Xor E2 |
Исключение . True, если Е1 и Е2 |
|||
имеют разные значения; иначе – |
||||
El Eqv E2 |
Эквивалентность . True,если Е1 име- |
|||
ет то же самое значение, что и Е2; |
||||
иначе – False |
||||
El Imp E2 |
Импликация . False, когда Е1 является |
|||
равным True и Е2 равно False; иначе |
||||
True. |
||||
Операнды Е в этой таблице представляет собой любое допустимое выражение с результатом типа Boolean, такое как операция сравнения.
Приоритеты выполнения операций при вычислении сложных выражений
Сложное (составное) выражение (complex expression) – это любое выражение, образованное из двух или более выражений. В таблице Б.4 собраны операции по группам в порядке убывания приоритета, то есть чем ниже расположена группа, тем позже выполняются указанные в ней операции. Для изменения этого порядка применяются круглые скобки. Операции одного уровня выполняются слева направо в том порядке, в котором они записаны в выражении.
Таблица Б.4 – Приоритеты операций VBA
Оператор |
Комментарии |
Возведение в степень, наивысший приоритет |
|
Унарный минус - изменение знака числа |
|
Умножение и деление имеют равные приоритеты; они вы- |
|
Деление нацело |
|
Остаток от деления нацело |
|
Сложение и вычитание имеют равный приоритет; они вы- |
|
числяются по мере появления в выражении слева направо |
|
Всякая конкатенация строк выполняется после любых |
|
арифметических операций в выражении и перед любыми |
|
операциями сравнения или логическими операциями |
|
<, <=, >, >=, |
Все операторы сравнения имеют равные приоритеты и вы- |
числяются по мере появления в выражении слева направо. |
|
Используйте круглые скобки для группирования операто- |
|
ров сравнения в выражениях |
|
Логические |
Not And Or Xor Eqv Im p – имеют низший приоритет |
операторы |
|
Приложение В Математические функции VBA
VBA предоставляет стандартный набор математических функций приведенный в таблице В.1.
Таблица B.1 – Математические функции VBA
Возвращает / действие |
||
Возвращает абсолютное значение N |
||
Косинус угла N, где N – это угол, измеренный в ра- |
||
Возвращает синус угла; N – это угол, измеренный в |
||
радианах |
||
Возвращает тангенс угла; N – угол в радианах |
||
Возвращает арктангенс N как угол в радианах |
||
Возвращает константу е, возведенную в степень N (е – |
||
это основание натуральных логарифмов и она (при- |
||
близительно) равна 2,718282 |
||
Возвращает целую часть N. Fix не округляет число, а |
||
отрицательным, Fix возвращает ближайшее отрица- |
||
тельное целое большее, чем или равное N |
||
Возвращает целую часть N. Int не округляет число, а |
||
отбрасывает любую дробную часть. Если N является |
||
отрицательным, Int возвращает ближайшее отрица- |
||
тельное целое меньшее, чем или равное N |
||
Возвращает натуральный логарифм N |
||
Возвращает случайное число; аргумент является не- |
||
обязательным. Используйте функцию Rnd только |
||
после инициализации VBA-генератора случайных чи- |
||
сел оператором Randomize |
||
Возвращает знак числа: –1, если N – отрицательное; |
||
1, если N –положительное; 0, если N равно 0 |
||
Возвращает корень квадратный из N. VBA отображает |
||
ошибку исполнения, если N – отрицательное |
||
Операнд N означает любое численное выражение? допустимое в
Аргумент тригонометрических функции (синуса, косинуса и тангенса) задается в радианах, а не в градусах. Обратная тригонометрическая функция A t n (x ) возвращает в программу значение угла в радианах от -π/2 до π/2, тангенс которого равен значению арифметического выражения х .
Связь между радианной и градусной мерами угла выражается через иррациональное число π ≈ 3,14159265358979323846.
Радианы= |
Градусы× π |
Градусы= |
Радианы× 180 |
Для перевода градусов в радианы можно также использовать встроенную функцию Excel - Application.Radians(x ), где x – угол, за-
данный в радианах.
Для получения числового значения константы π с точностью 15 цифр мантиссы можно использовать встроенную функцию Excel Application.Pi(), либо функцию VBA арктангенс
Pi= Application.Pi() либо Pi=4*Atn(1)
Примеры записи тригонометрических функций
В Visual Basic можно выделить пять основных и важных логических операторов: And, Or, Not, Xor и Eqv. Роль каждого из них я сейчас и попытаюсь объяснить!
Итак,
And!
Это,
наверное, самый простой и нужный логический оператор среди других.
Help:
Возвращает
результат конъюнкции (логического И) для двух выражений.
Синтксис:
результат
= выражение1
And
выражение2
Т.е. результат будет истинным только в том случае, когда истинны выражение1 И выражение2. Возвращаемые оператором значения представлены в следующей таблице:
выражение1 | выражение2 | результат |
True | True | True |
True | False | False |
True | Null | Null |
False | True | False |
False | False | False |
False | Null | False |
Null | True | Null |
Null | False | False |
Null | Null | Null |
А теперь маленький пример:
Представим себе, что переменные User_Has_Computer и User_Has_Car объявлены как булевы значения и в процессе каких-нибудь действий приняли значения либо True либо False. Вы устанавливаете условие, проверяющие эти значения:
Мы же сэмулируем это сами:) - впишите куда - нибудь следующие строки:
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
True
User_Has_Car
=
True
If
User_Has_Computer
And
User_Has_Car
Then
MsgBox "Вы счастливый человек!"
End
If
При проверки данного условия на экран выскочит сообщение, извещающие, что пользователь счастливый человек, т.к. у него есть машинa И компьютер:-)! А теперь перед третьей или четвёртой строкой поставьте апостроф """ - закоменнтируйте строку. Теперь одна из переменных будет False по умолчанию. Теперь сообщение НЕ выскочит, т.к. пользователь не очень счастливый, имея машину ИЛИ компьютер...
Следующий оператор не менее простой - Or.
Help:
Выполняет
операцию логического ИЛИ (сложения) для двух выражений.
Синтаксис:
результат
= выражение1
Or
выражение2
Результат
будет истинным только в том случае, если только одно из выражений истинно.
Возвращаемые оператором значения представлены в следующей таблице:
выражение1 | выражение1 | результат |
True | True | True |
True | False | True |
True | Null | True |
False | True | True |
False | False | False |
False | Null | Null |
Null | True | True |
Null | False | Null |
Null | Null | Null |
И снова маленький пример с прежними булевыми перменными User_Has_Computer и User_Has_Car, которые в процессе каких-нибудь действий приняли значения либо True либо False.
Dim
User_Has_Computer
As Boolean
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
False
User_Has_Car
=
True
If
User_Has_Computer Or User_Has_Car
Then
MsgBox "Вы почти счастливый человек!"
End
If
При проверки данного условия на экран выскочит сообщение, извещающие, что пользователь почти счастливый человек, т.к. у него есть машинa, но нет компьютера:-|...
Оператор Not.
Help:
Выполняет
над выражением операцию логического отрицания.
Синтаксис:
результат
= Not
выражение
Т.е.
результат
стаёт
противополжным выражению
(исключая Null). Возвращаемые оператором
значения представлены в следующей таблице:
Пример:
Dim User_Has_Computer As Boolean
User_Has_Computer = False
If
Not
User_Has_Computer
Then
MsgBox "Сочувствую...:)"
End
If
Объясняю: условие If
... Then выполняется тогда, когда какое-нибудь выражение (на месте...)
равно True. Представим, что переменная User_Has_Computer
= False. Тогда строка
Not
User_Has_Computer даёт результат True и условие выполняется!
Оператор Xor.
Help:
Выполняет операцию
исключающего ИЛИ для двух выражений.
Синтаксис:
[результат
=]
выражение1
Xor
выражение2
В принципе, этот оператор
похож на Or, но это не просто ИЛИ
, а исключающее ИЛИ
. Если
одно и только одно из выражений
истинно (имеет значение True), результат
имеет значение True. А оператор Or допускает два истинных выражения
.
Результат
Пример:
Dim
User_Has_Computer
As Boolean
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
False
User_Has_Car
=
True
If
User_Has_Computer
Xor
User_Has_Car
Then
MsgBox "Вам нужна машина И компьютер!"
End
If
Здесь так же, как и в предыдущем примере условие выполняется только тогда, когда строка User_Has_Computer Xor User_Has_Car истинна (= True). А истинна она тогда и только тогда, когда только одно из условие истинно. Если оба, то условие уже не исполнится.
Оператор Eqv.
Help:
Используется
для проверки логической эквивалентности двух выражений.
Синтаксис:
результат
= выражение1
Eqv
выражение2
Тут
совсем всё просто: результат будет истинным в том случае, если оба выражения
либо истинны, либо ложны. Результат
определяется следующим образом:
Пример:
Dim
User_Has_Computer
As Boolean
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
True
User_Has_Car
=
True
If
User_Has_Computer
Eqv
User_Has_Car
Then
MsgBox "Вы или счастливый или несчастный человек!"
End
If
Здесь компьютер назовёт Вас человеком "счастливым или несчастным", т.к. условие выполняется только тогда, когда пользователь имеет и машину и компьютер или не того и не другого.
Язык VBA был разработан таким образом, чтобы его можно было достаточно легко и быстро изучить, а затем ежедневно использовать. Язык VBA полезен как профессиональным программистам, так и простым пользователям, для автоматизации повседневной рутинной работы. Какой бы не была Ваша цель: упростить повседневную работу или повысить производительность труда, безусловно, язык VBA лучше всего подходит для этих целей, поскольку он разработан специально для работы с приложениями пакета Microsoft Office.
Знание операторов является необходимой основой для изучения любой темы по VBA, т.е. прежде чем браться за изучение языка, стоит достаточное время уделить операторам и функциям.
Операторы VBA
- AppActivate title, wait - Активизирует открытое приложение по заданному аргументом title заголовку или идентификатору задачи
- Beep - подача звукового сигнала
- Call name, argumentlist - Вызов процедуры с названием name. (Поскольку ключевое слово Call необязательно и можно вызвать процедуру, используя только ее имя, этот оператор редко используется в программировании VBA)
- ChDir path - Заменяет текущую папку папкой, указанной аргументом path
- Close filenumberlist - Изменяет текущий диск на диск, указанный аргументом drive
- Const CONSTNAME - Объявляет константой переменную с именем CONSTNAME
- Date = date - Изменяет системную дату на дату, указанную аргументом date
- Declare name - Объявляет процедуру из динамически присоединяемой библиотеки (DLL)
- DefBool letterrange - Оператор уровня модуля, устанавливающий тип Boolean типом данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange (например, DefBool A-F)
- DefByte letterrange - Задает тип Byte как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefCur letterrange - Задает тип Currency как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefDate letterrange - Задает тип Date как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefDbl letterrange - Задает тип Double как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefInt letterrange - Задает тип Integer как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefLng letterrange - Задает тип Long как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefObj letterrange - Задает тип Object как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefSng letterrange - Задает тип Single как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefStr letterrange - Задает тип String как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DefVar letterrange - Задает тип Variant как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
- DeleteStting appname, section, key - Удаляет раздел section или ключ key из реестра Windows
- Dim varname - Объявляет переменную с именем varname
- Do:Loop - Выполняет цикл по нескольким операторам до тех пор, пока логическое условие равно True
- End Keyword - Завершает процедуру, функцию или управляющую структуру
- Enum name - Оператор уровня модуля, который объявляет переменную перечислимого типа
- Erase arraylist - Очищает память от динамически выделенного массива или выполняет повторную инициализацию массива с фиксированными размерами
- Error errornumber - Имитирует ошибку, присваивая объекту Err значение errornumber
- Event procedurename(arglist) - Оператор может присутствовать только в модуле класса. Он объявляет событие, определенное пользователем
- Exit keyword - Выход из процедуры, функции или управляющей структуры
- FileCopy source, destination - Копирует файл source в папку destination (при этом можно изменить имя исходного файла)
- For Each:Next - Цикл по каждому члену коллекции
- For:Next - Цикл по нескольким операторам, выполняемый до тем пор, пока счетчик цикла не достигнет заданного значения
- Function - Объявляет пользовательскую процедуру-функцию
- Get #filenumber, varname - Производит чтение в переменную из файла ввода-вывода, открытого оператором Open
- GoSub:Return - Осуществляет вход в подпрограмму, описанную в процедуре, и выход из нее. (Использование этого оператора не рекомендуется, поскольку создание отдельной процедуры позволит сделать код более простым для понимания)
- GoTo line - Передает управление на строку кода, на которую указывает метка line
- If:Then:Else - Выполняет один из двух фрагментов кода на основе результата логической проверки
- Imlements InterfaceName, Class - Определяет название интерфейса или класса, который будет реализован в модуле класса
- Input #filenumber, varlist - Производит чтение из файла ввода-вывода в переменные
- Kill pathname - Удаляет файл pathname с диска
- Let varname = expression - Устанавливает переменную varname равной выражению expression. Ключевое слово Let необязательно и практически никогда не используется
- Line Input #filenumber, var - Производит чтение одной строки из файла ввода-вывода и сохраняет ее в строковой переменной
- Load - Загружает форму в память, но не выводит ее на экран
- Lock #filenumber, recordrange - Управляет доступом к файлу ввода-вывода
- LSet stringvar = string - Размещает строку, начиная с крайнего слева символа, в переменной типа String. При этом размер переменной не изменяется
- LSet var1 = var2 - Копирует переменную одного пользовательского типа в переменную другого, но совместимого, пользовательского типа
- Mid - Заменяет заданное количество символов в строковой переменной символами из другой строки
- MidB - Побайтно заменяет символы в строковой переменной символами из другой строки
- MkDir path - Создает папку с именем path
- Name oldpathname as newpathname - Изменяет имя файла или папки
- On Error - Задает способ обработки ошибок
- On:GoSub, On:GoTo - Передает управление заданной строке на основе результата выражения
- Open pathname, : - Открывает файл для ввода-вывода
- Option Base 0|1 - Задает (на уровне модуля) для массивов установленную по умолчанию нижнюю границу (номер первого элемента)
- Option Compare Text|Binary - Определяет (на уровне модуля) установленный по умолчанию режим сравнения строк
- Option Explicit - Принуждает программиста к явному объявлению переменных. Введите этот оператор на уровне модуля
- Option Private - Указывает, что модуль закрыт, и к нему нельзя обратиться из процедур, расположенных в других модулях. Введите оператор на уровне модуля
- Print #filenumber - Производит запись в файл ввода-вывода
- Private varname - Объявляет, что переменная varname будет закрытой, и ею можно будет пользоваться только в модуле, в котором она объявлена. Введите оператор на уровне модуля
- Property Get - Объявляет процедуру свойства, которая будет принимать значения этого свойства
- Property Let - Присваивает значение свойству в процедуре свойства
- Property Set - Устанавливает ссылку на объект в процедуре свойства
- Public varname - Открывает доступ к переменной varname для всех процедур, содержащихся в модуле
- Put #filenumber, varname - Записывает данные из переменной varname а файл ввода-вывода
- RaiseEvent eventname, arguments - Вызывает событие с именем eventname
- Randomize number - Инициализирует генератор случайных чисел. Пропустить аргумент number, чтобы каждый раз инициализировать его разными начальными числами
- ReDim varname - Повторно выделяет память для динамического массива
- Rem comment - Указывает VBA, что следующий за оператором текст является комментарием. Вместо этого оператора чаще используется символ апострофа
- Reset - Закрывает все файлы ввода-вывода, которые были ранее открыты оператором Open
- Resume - После возникновения ошибки возобновляет выполнение программы со строки, в которой возникла ошибка
- RmDir path - Удаляет папку
- RSet stringvar = string - Записывает строку в строковую переменную, выравнивая символы по правому краю
- SaveSetiing appname, : - Создает или сохраняет установки в реестре Windows
- Seek #filenumber, position - Устанавливает текущую позицию в файле ввода-вывода
- Select Case - Выполняет группу операторов на основе значения выражения
- SendKeys string, wait - Передает в активное приложение нажатия клавиш, заданные строкой string так, как будто они были введены с клавиатуры
- Set objectvar = object - Присваивает объект object объектной переменной с именем objectvar
- SetAttr pathname, attr - Задает атрибуты доступа, определенные аргументом attr (например, vbReadOnly) для файла, заданного аргументом pathname
- Static varname - Объявляет (на уровне модуля), что переменная varname будет сохранять свои значения все время, пока будет выполняться код модуля
- Stop - Переводит VBA в режим паузы
- Sub - Объявляет процедуру
- Time = time - Устанавливает системное время равным аргументу time
- Type varname - Объявляет пользовательский тип данных. (Используется только на уровне модуля)
- Unload - Удаляет форму из памяти
- Unlock #filenumber, recordrange - Удаляет атрибуты доступа для файла ввода-вывода
- While:Wend - Выполняет цикл по группе операторов до тех пор, пока логическое условие истинно
- Width #filenumber, width - Задает ширину строки для файла ввода-вывода
- With:End With - Выполняет группу операторов для заданного объекта
- Write #filenumber - Производит запись данных в файл ввода-вывода
Программа на VBA – это последовательность операторов.
При составлении программ следует придерживаться ряда соглашений. Так, на одной строке можно разместить несколько операторов. Между операторами в одной строке ставится двоеточие.
Любую строку можно разбить на две, расположив в конце первой знаки символов «Пробел» + «Знак подчеркивания» (_), в этом случае вторая строка будет считаться продолжением первой.
Для того, чтобы сделать программу легко читаемой используют комментарии. В языке VBA существуют два способа ввода комментариев: применение апострофа (‘), который можно поставить в любом месте строки, и зарезервированное слово Rem вместо апострофа.
1. Оператор Dim предназначен для объявления типов переменных.
· Dim A As Integer – переменная A объявляется как целое, т.е. в ней будут храниться только целые величины .
· Dim D As Date – объявляется переменная D для хранения дат.
· Dim Фамилия, Наименование As String – объявлютсяпеременные. Фамилия и Наименование, предназначеные для хранения текста.
· Dim B(12) As Integer – объявляется одномерный массив (вектор), состоящий из 12 целых чисел, причем по умолчанию первый элемент массива будет B(0), а последний B(12).
· Dim B(3,3) As Single – объявляется двумерный массив 3х3 (матрица), состоящий из действительных чисел.
Если не указан тип переменной, то по умолчанию используется тип Variant. Однако указание конкретного типа переменной делает программу надежнее и убыстряет ее работу, т.к. VBA не требуется тратить время на распознавание необъявленной переменной при каждом обращении к ней.
Если размер массива M заранее не известен и определяется в ходе программы, то при описании массива число элементов не указывается, и массив определяется так:
Dim M() As Integer
После определения числа элементов массива, например, N, необходимо записать оператор
2. Оператор присваивания предназначен для присваивания переменной какого-либо значения.
Синтаксис:
Переменная (или свойство объекта) = выражение.
· а=5 – переменной А присвоить значение 5 ;
· b=«Менеджер» – переменной b присвоить значение «Менеджер» ;
· Адрес=Sheets("Организации").Cells(2,2) – переменной Адрес присвоить содержимое ячейки B2, которая находится на листе Организации в текущей рабочей книге;
· Фамилия=UserForm1.TextBox1.Text – переменнойФамилия присвоить содержимое поля TextBox1 пользовательской формы UserForm1.
3. Оператор With/End with избавляет программиста от большого количества повторений имени одного и того же объекта.
Синтаксис:
With объект
оператор1
оператор2
операторN
Например, вместо последовательности операторов
UserForm1.TextBox1.Text = Date
UserForm1.TextBox2.Text = “ “
UserForm1.ComboBox1.Text = “ “
можно записать так
TextBox1.Text = Date
. TextBox2.Text = “ “
. ComboBox1.Text = “ “
REM На листе Лист1 в столбце А, начиная со второй строки, записаны ‘тарифы сотрудников. Заполним поле со списком ComboBox1 в ‘пользовательской форме UserForm1
‘Первая строка программы – на листе Лист1 в столбце А ‘подсчитывается количество заполненных ячеек, результат ‘присваивается переменной N
N=Application.CountA(Sheets(“Лист1”).Range(“A:A”)).
D=”A2:A”&Cint(N)
Sheets(“Лист1”).Range(D).Name=”Тарифы”
TextBox1.Text = Date
. TextBox2.Text = “ “
. ComboBox1.Text = “ “
. ComboBox1.Rowsource = “Тарифы “
4. Условный оператор If/Then/Else – позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие
Синтаксис:
If условие Then операторы1 [Else операторы2]
Если условие истинно, то выполняются операторы1, в противном случае выполняются операторы2.
Допускается также использование сложного условного оператора, который записывается в виде блока:
If условие1 Then
операторы1
ElseIf условие2 Then