- •Содержание
- •Раздел 1. Быстрый старт 2
- •Раздел 2. Редактор Visual Basic 11
- •Immediate Window (окно проверки) 15
- •Раздел 3. Переменные и типы данных 27
- •Раздел 4. Операторы управления 51
- •Раздел 5. Процедуры, подпрограммы и функции 66
- •Раздел 6. Объекты ms Excel 101
- •Раздел 7. Пользовательские формы 139
- •Immediate Window (окно проверки) 177
- •Введение
- •Раздел 1.Быстрый старт Использование макрорекордера
- •Запись макроса
- •Запуск макроса
- •Абсолютные и относительные ссылки Запись формулы на рабочем листе
- •Макрорекордер
- •Диалоговые окна для ввода/вывода данных
- •Функция InputBox
- •Функция MsgBox
- •Раздел 2.Редактор Visual Basic
- •Окна редактора vb
- •Project Window (окно проекта)
- •Properties Window (Окно свойств)
- •Code (окно программы)
- •Immediate Window (окно проверки)
- •Получение справки
- •Запись процедур
- •Режимы работы с программой
- •Ошибки и их обнаружение
- •Отладка
- •Меню и панели инструментов Visual Basic
- •Панели инструментов Стандартная панель инструментов
- •Панель инструментов отладки
- •Раздел 3.Переменные и типы данных Объявление переменных
- •Важность объявления переменных
- •Область видимости переменных
- •Время жизни переменных
- •Инициализация переменных
- •Операции с элементарными данными
- •Оператор присваивания
- •Выполнение операций
- •Арифметические операции
- •Операции сравнения
- •Оператор Like
- •Логические операции
- •Символьные операции
- •Приоритет операций
- •Операции с другими типами данных
- •Объектные переменные
- •Массивы
- •Динамические массивы
- •Пользовательский тип
- •Раздел 4.Операторы управления
- •Условный оператор If
- •Оператор выбора Select Case
- •Операторы цикла
- •Цикл For…Next
- •Цикл For Each…Next
- •Оператор Set
- •Цикл Do…Loop
- •Цикл While…Wend
- •Раздел 5.Процедуры, подпрограммы и функции
- •Классификация процедур
- •Структура и объявление процедуры
- •Синтаксис объявления процедуры общего типа
- •Синтаксис объявления функции
- •Вызов процедуры
- •Параметры и аргументы
- •Возврат значения функции
- •Использование процедур-функций на рабочем листе
- •Поименованные аргументы
- •Использование необязательных аргументов
- •Использование параметра ParamArray
- •Вызов процедур другого проекта
- •Автопроцедуры
- •Событийные процедуры
- •Рекурсивные процедуры
- •Встроенные функции Классы функций
- •Использование табличных функций
- •Организация интерфейса при помощи встроенных функций
- •Функция MsgBox
- •Функция InputBox
- •Строковые функции
- •Примеры на использование различных строковых функций Функция Format
- •Функция Val
- •Функции Len, Mid
- •Функция Left
- •Функция Instr
- •Функция Chr
- •Математические функции
- •Функции Int и Fix
- •Функция Log
- •Функции Randomize и Rnd
- •Функции даты и времени
- •Примеры функций даты и времени Функции Day, Month, Year, DateSerial
- •Функции Now, Time, Timer
- •Функция WeekDay
- •Функции Hour, Minute, Second
- •Раздел 6.Объекты ms Excel
- •Свойства объектов
- •Методы объектов
- •Модель объектов
- •Коллекции объектов
- •Обращение к объекту Контейнеры
- •Ссылка на объект
- •Оператор With
- •Использование объектных переменных
- •Объект Application
- •Активные объекты
- •Свойства, влияющие на высвечивание на экране Свойство DisplayAlerts (r/w Boolean)
- •Свойства DisplayFormulaBar (r/w Boolean), DisplayStatusBar (r/w Boolean)
- •Свойство ScreenUpdating (r/w Boolean)
- •Свойства Top, Left, Height, Width, UsableWidth, WindowState
- •Свойство Visible (r/w Boolean)
- •Другие свойства объекта Application
- •Методы Метод Calculate
- •Метод CheckSpelling
- •Метод OnTime
- •Метод Wait
- •Коллекции объектов
- •Объекты Workbooks и Workbook
- •Событийные процедуры
- •Объекты Sheets, WorkSheets и WorkSheet
- •Свойства Свойство Name (r/w String)
- •Свойство Type (r/o String)
- •Свойство UsedRange
- •Свойства Next и Previous
- •Свойство Parent
- •Свойство Visible (r/w Boolean)
- •Методы Метод Add
- •Методы Move и Select
- •Событийные процедуры
- •Объект Range
- •Свойства Cвойство Range
- •Свойство Cells
- •Свойство Offset
- •Метод Union и свойство Areas
- •Свойства Column и Row (r/o Integer)
- •Свойства Columns и Rows
- •Свойство CurrentRegion
- •Cвойства, связанные с шириной и высотой ячейки
- •Методы Методы Select и Activate
- •Метод Clear
- •Цветовое оформление объекта Range Свойство ColorIndex
- •Свойство Color
- •Раздел 7.Пользовательские формы
- •Режимы работы с формой
- •Режим конструктора
- •Элементы управления
- •Событийные процедуры
- •Режим выполнения
- •Объекты UserForm и Controls
- •Разработка приложения
- •Приложение 1
- •Конструирование начальной формы
- •Свойства формы и элементов управления
- •Создание событийных процедур
- •Конструирование формы для выбора рабочего листа
- •Создание событийных процедур
- •Элемент ListBox
- •Событийная процедура инициализации формы
- •Завершение разработки приложения
- •Связь формы с ячейками рабочего листа
- •Элемент TextBox
- •Элемент ListBox
- •Приложение 2
- •Конструирование форм
- •Процедуры
- •Приложение a. Справочная система Просмотр объектов, их свойств и методов (Object Browser)
- •Окно Object Browser
- •Панель инструментов Object Browser
- •Выход из Object Browser
- •Интерактивная подсказка
- •Приложение b. Инструментальные средства отладки программ
- •Контрольные точки или точки останова
- •Трассировка или пошаговое выполнение программы
- •Использование объекта Debug
- •Окна отладчика
- •Immediate Window (окно проверки)
- •Окно значения переменной
- •Locals Window (окно локальных переменных)
- •Окно контрольных значений (Watches)
- •Приложение c. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Условный оператор If
Оператор организует ветвление программы, т.е. выполнение различных действий в зависимости от истинности условия – это может быть условие на значения переменных или условие относительно текущего состояния приложения. Например, если необходим ввод данных в ячейки таблицы и окно приложения "спрятано", то его необходимо отобразить.
Для записи условного оператора используется конструкция If... Then... Else. Условный оператор может быть записан в одну строку или блоком.
Синтаксис оператора при записи в строку
If condition Then [statements] [Else elsestatements]
Например, оператор IF salary <9000 Then social=salary*0.2 вычисляет выплату, если зарплата менее 9000.
Синтаксис оператора при записи блоком
If condition-1 Then [statements]
[ElseIf condition-2 Then [elseifstatements-2] ...
[Else [elsestatements]]
End If
сondition-n – тестируемые выражения со значением True или False. Обязательный элемент;
statements, elseifstatements-2, elsestatements – последовательности операторов, необязательные элементы;
ElseIf – ключевое слово (записывается в одно слово), используемое для задания дополнительных условий (их может быть несколько). Необязательный элемент;
End If – оператор, играющий роль закрывающей операторной скобки.
Если условие (condition) верно, то выполняется последовательность операторов statements. Если условие нарушено, при записи оператора в строку выполняется последовательность операторов elsestatements, а при записи оператора блоком конструкция ElseIf позволяет задать дополнительные условия тестирования и, если ни одно из них не выполнено, то выполняются операторы elsestatements.
После выполнения одной последовательности операторов, управление передается оператору, следующему за условным оператором, а в случае блочной структуры – за EndIf.
IF salary <9000 Then |
social=salary*0.2 |
Else |
social=0 |
End If |
Важно
Комбинируя несколько операторов сравнения, можно создать достаточно сложное логическое выражение.
Последовательность выполняемых действий statements, elseifstatements, elsestatements может быть пустой или состоять из нескольких операторов, записанных последовательно в разных строках или через двоеточие в одной строке. По крайней мере, одна из последовательностей должна быть непустой.
Часть конструкции, относящаяся к Else и к ElseIf, может быть опущена, если она не используется (нет альтернативных действий).
Конструкций ElseIf может быть несколько. При наличии такой конструкции отыскивается первое истинное условие, и выполняются соответствующие операторы elseifstatements.
Оператор EndIf обязателен в блочной структуре условного оператора и не используется при записи условного оператора в строку.
Возможно использование вложенных условных операторов.
Примеры
Вычисляется сумма четных чисел в интервале значений от 0 до 20 и произведение нечетных чисел в том же интервале.
Public Sub even_odd()
Dim s As Integer, p As Long, i As Integer
p = 1
For i = 1 To 20
If i Mod 2 = 0 Then
s = s + i
Else
p = p * i
End If
Next i
Debug.Print "sum ", s, "product ", p
End Sub
Переменная p описана как Long, т.к. значение произведения превосходит число 32767. Начальное значение переменной устанавливается в 1.
В оператор цикла вложен условный оператор . Четность числа проверяется как нулевой остаток от деления на два.
Первые двадцать ячеек столбца A меняют свой цвет. Если номер ячейки кратен трем, то цвет заливки красный. Для первой ячейки в тройке ячеек, то устанавливается синий цвет заливки. Остальные ячейки окрашиваются черным цветом.
Public Sub color_cells_if() Dim i As Integer For i = 1 To 20 If i Mod 3 = 1 Then Cells(i, 1).Interior.ColorIndex = 5 'синий ElseIf i Mod 3 = 0 Then Cells(i, 1).Interior.ColorIndex = 3 'красный Else Cells(i, 1).Interior.ColorIndex = 1 End If Next i End Sub |
Запись Cells(i,1) представляет объект Range – ячейку первого столбца i-ой строки. Объект Interior – цвет заливки ячейки. Свойство ColorIndex этого объекта – номер цвета из цветовой палитры. |
При использовании в условии числового выражения нуль интерпретируется как False, а любое значение, отличное от нуля, как True. В условии можно проверить тип выражения или значение переменной, используя специальные функции:
Функция |
Синтаксис |
Предназначена для проверки |
IsArray |
IsArray(VarName) |
является ли переменная VarName массивом |
IsDate |
IsDate(expression) |
является ли выражение expression датой или может ли быть преобразовано в дату |
IsEmpty |
IsEmpty(expression) |
инициализирована ли переменная expression или содержит ли выражение (переменная или ячейка) пустое значение |
IsMissing |
IsMissing(argname) |
пропущен ли аргумент argname процедуры. Используется в процедурах, имеющих необязательные параметры |
IsNull |
IsNull(expression) |
имеет ли выражение expression значение Null |
IsNumeric |
IsNumeric(expression) |
является ли значение выражения expression числом |
IsObject |
IsObject(expression) |
является ли значение выражения expression объектом |
Пример
Процедура запрашивает ввод числа или даты и, в зависимости от типа введенных данных, высвечивает сообщение.
Public Sub num_date() Dim A As Variant A = InputBox("Введите число или дату") If IsDate(A) Then MsgBox "Дата " & Format(A, "dddd dd mm yyyy") ElseIf IsNumeric(A) Then MsgBox "Число " & A Else MsgBox "Некорректный ввод " End If End Sub |
Если введена дата или число, то введенное значение высвечивается. В противном случае – сообщение о некорректности ввода. Дата форматируется: высвечивается дата и дополнительно день недели, соответствующий введенной дате. |