- •Что такое Visual Basic for Applications
- •Автоматизация среды Excel
- •Запись простого макроса
- •Выполнение макросов
- •Просмотр кода макроса
- •Редактирование кода макроса
- •Ограниченность макросов
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Назначение макросам комбинаций клавиш
- •Где хранить макросы
- •Создание личной книги макросов
- •Сохранение макросов в личной книге макросов
- •Выполнение макросов из личной книги макросов
- •Редактирование макросов в личной книге макросов
- •Удаление макросов из личной книги макросов
- •Назначение макросов командным кнопкам
- •Назначение макроса графическим изображениям
- •Назначение макросов кнопкам панелей инструментов
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Введение в процесс разработки приложений
- •Кто будет использовать приложение
- •Откуда будут поступать данные для приложения
- •Где и как будут храниться данные, полученные с помощью приложения
- •Как данные будут обрабатываться приложением
- •Вид выходных данных
- •Типы элементов управления
- •Вставка элементов управления в рабочий лист
- •Форматирование элементов управления
- •Имена элементов управления
- •Экранные формы
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Модуль: дом для кода vba
- •Обзор процедур
- •Создание процедур
- •Выполнение процедуры
- •Сохранение изменений в модуле
- •Переменные
- •Типы данных
- •Объявление переменных
- •Соглашения об именах переменных
- •Массивы
- •Присвоение значений переменным
- •Использование констант
- •Область видимости переменных и констант
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Функция MsgBox
- •Функция InputBox
- •Метод InputBox
- •Именование аргументов
- •Объединение текстовых строк
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Управление выполнением приложения
- •Оператор If
- •Оператор Select Case
- •Использование встроенных диалоговых окон Excel
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Оператор For…Next
- •Оператор Do... Loop
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Что такое объект
- •Объекты, свойства и методы
- •Объектная модель Excel
- •Пять наиболее часто используемых объектов
- •Как понимать иерархию объектной модели
- •Ссылка на объекты в коде vba
- •Работа с объектами
- •Задание свойств объекта
- •Использование методов
- •Справочная информация о свойствах и методах
- •Переменные-объекты
- •1: Sub ПримерПеремОбъекта()
- •Коллекции
- •Метод Add
- •Свойство Count
- •1: Sub КоличРабЛистов()
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Объект Application
- •Использование встроенных функций Excel
- •Свойства и методы объекта Application
- •Объект Workbook
- •Объект Worksheet
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Описание объекта Range
- •Свойства объекта Range
- •Методы объекта Range
- •Использование оператора With
- •Оператор For Each
- •Использование объекта Range
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Панели инструментов
- •Просмотр кода
- •Использование справочной системы
- •Просмотр объектов
- •Параметры редактора Visual Basic
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Тестирование и отладка как этап разработки приложений
- •Отладка
- •Режим останова
- •Использование окна Immediate
- •Просмотр значений в окне Immediate
- •Пошаговое выполнение программ
- •Наблюдение за переменными
- •Исправление ошибок
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Понятие об обработке ошибок
- •Перехват ошибок
- •Написание процедуры обработки ошибся
- •Выход из обработчика ошибок
- •Пример обработчика ошибок
- •Централизованный обработчик ошибок
- •Вопрос и ответы
- •Практикум
- •Упражнение
- •Вставка экранных форм в приложения
- •Свойства экранной формы
- •Выполнение экранной формы
- •Вставка элементов управления в экранную форму
- •Свойства элементов управления
- •Свойства командных кнопок
- •Свойства переключателей
- •Блокировка элементов управления
- •Экранные подсказки к элементам управления
- •Задание порядка обхода элементов формы
- •Назначение быстрых клавиш элементам формы
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Инициализация значений экранной формы
- •Вызов экранной формы
- •Управление поведением формы
- •Проверка вводимых данных
- •Сохранение данных, введенных в форму
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Настройка панелей инструментов
- •Создание панелей инструментов
- •Процедуры, управляющие панелями инструментов
- •Создание панели инструментов
- •Удаление панели инструментов
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Способы изменения меню
- •Программная работа с меню
- •Добавление пунктов и команд меню
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Создание диаграмм
- •Запись макроса построения диаграмм
- •Код макроса
- •Изменение кода макроса
- •Усовершенствованная процедура построения диаграмм
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Работа со сводной таблицей
- •Основы сводных таблиц
- •Запись макроса для создания сводной таблицы
- •Исследование кода макроса
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Базы данных, доступные из Excel
- •Средства доступа к внешним данным
- •Использование ms Query
- •Код записанного макроса
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Что такое ado
- •Объекты доступа к базам данных
- •Использование ado
- •Создание ссылки на библиотеку ado
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Вставка полей в экранную форму
- •Перемещение по записям
- •Редактирование данных
- •Добавление средства поиска
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Что такое автоматизация
- •Основы автоматизации
- •Ссылка на библиотеку объектов приложения-сервера
- •Просмотр библиотеки объектов
- •Создание экземпляра приложения-сервера
- •Использование объектов Microsoft Word
- •Вопросы и ответы
- •Практикум
- •Упражнение
- •Автоматическое выполнение процедур
- •Процедуры, выполняемые при наступлении событий
- •Создание надстроек Excel
- •Упражнение
- •Приложение. Ответы Ответы к 1-му часу Тесты
- •Ответы ко 2-му часу Тесты
- •Ответы к 3-му часу Тесты
- •Ответы к 4-му часу Тесты
- •Упражнение
- •Ответы к 5-му часу Тесты
- •Упражнение
- •Ответы к 6-му часу Тесты
- •Упражнение
- •Ответы к 7-му часу Тесты
- •Упражнение
- •Ответы к 8-му часу Тесты
- •Упражнение
- •Ответы к 9-му часу Тесты
- •Упражнение
- •Ответы к 10-му часу Тесты
- •Упражнение
- •Ответы к 11-му часу Тесты
- •Упражнение
- •Ответы к 12-му часу Тесты
- •Упражнение
- •Ответы к 13-му часу Тесты
- •Упражнение
- •Ответы к 14-му часу Тесты
- •Ответы к 15-му часу Тесты
- •Упражнение
- •Ответы к 16-му часу Тесты
- •Упражнение
- •Ответы к 17-му часу Тесты
- •Упражнение
- •Ответы к 18-му часу Тесты
- •Упражнение
- •Ответы к 19-му часу Тесты
- •Упражнение
- •Ответы к 20-му часу Тесты
- •Упражнение
- •Ответы к 21-му часу Тесты
- •Упражнение
- •Ответы к 22-му часу Тесты
- •Упражнение
- •Ответы к 23-му часу Тесты
- •Упражнение
- •Ответы к 24-му часу Тесты
- •Упражнение
Оператор If
Первым условным оператором, который мы рассмотрим, будет оператор If... Then… Else (Если... Тогда... Иначе). Этот оператор имеет следующий синтаксис:
If условие_1 Then
[операторы_1]
[ElseIf условие_2 Then
[операторы_2]
[Else
[операторы]]
End If
В этом синтаксисе условие_1 - необходимая часть оператора. Это то основное условие, которое должно проверяться. Если значение этого условия ИСТИНА, выполняются операторы, записанные после слова Then.
Если вы хотите проверить второе условие в этом же операторе, добавьте еще одно выражение - ElseIf с последующим условием. VBA первым проверяет условие, записанное после слова If. Если это условие ложно, то проверяется второе условие, приведенное после слова ElseIf. Если это условие истинно, то выполняются операторы_2. В противном случае выполняются операторы, записанные после слова Else. Рассмотрим пример использования оператора If.
-
Откройте новую рабочую книгу.
-
Создайте таблицу, показанную на рис. 6.1.
Рис. 6.1. Рабочий лист, который послужит основой приложения
-
В ячейку В6 введите формулу =В3+В4, вычисляющую общую сумму.
-
Нажмите <Alt+F11> для открытия редактора Visual Basic.
-
В окне проектов Project Explorer щелкните правой кнопкой мыши на элементе ЭтаКнига.
-
В контекстном меню выберите команду Inserts > Module (Вставка > Модуль) для вставки модуля в рабочую книгу.
-
Создайте новую процедуру и назовите ее Отправка.
-
Введите следующий код процедуры:
Dim iResponse As Integer
iResponse = MsgВох (“Необходима для этого груза отправка?”, vbYesNo)
If iResponse = vbYes Then
Range("B4").Value = 10
Else
Range("B4").Value = 0
End If
-
Перейдите в рабочую книгу.
-
Вставьте командную кнопку в рабочий лист. Откроется диалоговое окно Назначить макрос объекту.
-
В списке Имя макроса выберите пункт Отправка и щелкните на кнопке ОК. Сейчас вы назначили командной кнопке процедуру.
-
Выделите текст на командной кнопке и нажмите клавишу <Delete> для его удаления. Введите текст Общая сумма - это новое название кнопки.
-
Щелкните вне командной кнопки для снятия с нее выделения. В результате получим рабочий лист, подобный показанному на рис. 6.2.
-
Введите число 120 в ячейку В3.
-
Щелкните на кнопке Общая сумма. Отобразится окно сообщения (рис. 6.3).
-
Щелкните на кнопке Да. В ячейке В4 появится число 10.
-
Снова щелкните на кнопке Общая сумма.
-
Теперь в окне сообщения щелкните на кнопке Нет. В ячейке В4 отобразится ноль.
Рис. 6.2. Законченный рабочий лист
Рис. 6.3. Щелкните на одной из кнопок в окне сообщения
Этот простой пример демонстрирует использование условного оператора. Прежде чем закончить с этим примером, задержите свое внимание на коде созданной процедуры (листинг 6.1).
Листинг 6.1. Процедура Отправка
1:Public Sub Shipping ()
2: Dim iResponse As Integer
3:
4: iResponse = MsgBox (“Необходима для этого груза отправка?”, vbYesNo)
5:
6: If IResponse = vbYes Then
7: Range (“B4”).Value = 10
8: Else
9: Range (“B4”).Value = 0
10: End If
11:
12:End Sub
Во второй строке процедуры объявляется переменная iResponse
Dim iResponse As Integer
Эта переменная используется для хранения значения, возвращаемого из окна сообщения:
iResponse = MsgBox(“Необходима для этого груза отправка?”, vbYesNo)
Возвращаемое окном сообщения значение генерируется кнопками Да и Нет. Значение переменной iResponse проверяется оператором If:
If iResponse = vbYes Then
Range("B4").Value = 10
Else
Range<"B4").Value = 0
End If
Если значение переменной iResponse равно vbYes, т.е. пользователь щелкнул на кнопке Да, то в ячейку В4 вводится число 10. В противном случае в ячейку В4 вводится ноль.
Можно создавать более сложные структуры с операторами If, вкладывая их один в другой. В следующем примере на размер начисляемых комиссионных влияют три фактора. Первый фактор - находится ли товар в продаже. Если товар находится в продаже, то все продавцы получают 1% комиссионных, если еще нет - 2%, Второй фактор - стаж работы продавца в фирме. Третий фактор - отдел, в котором работает продавец, например для продавцов отдела фурнитуры полагается дополнительно 1% комиссионных.
Когда один оператор находится внутри другого оператора, такая структура называется вложением операторов.
-
Перейдите на новый рабочий лист в открытой рабочей книге.
-
Создайте таблицу, как на рис. 6.4.
-
Перейдите в редактор Visual Basic.
-
Вставьте новую процедуру с именем Комиссионные.
Рис. 6.4. Рабочий лист, используемый для начисления комиссионных.
-
Введите следующий код процедуры:
Dim sngCommission As Single
If Range (“B2”) = “Нет” Then
sngCommission = 0.02
If Range(“В3”).Value >= 5 And Range(“B3”) <10 Then
sngCommission = sngCommission + 0.01
ElseIf Range(“B3”).Value >= 10 Then
sngCommission = sngCommission + 0.02
End If
If Range (“B1”).Value = “Фурнитура” Then
sngCommission = sngCommission + 0.01
End If
Else
sngCommission = 0.01
End If
Range(“B5”).Value = sngCommission
-
Перейдите на рабочий лист и вставьте командную кнопку. Назначьте процедуру Комиссионные.
-
Замените текст на кнопке - назовите ее Вычисление комиссионных.
-
Для снятия выделения с кнопки щелкните где-нибудь вне ее.
-
Введите Фурнитура в ячейку В1. Удостоверьтесь, что текст введен правильно.
-
Введите Нет в ячейку В2. Проверьте, чтобы текст был введен именно так, как здесь показано.
-
Введите число 10 в ячейку В3.
-
Щелкните на командной кнопке. В ячейке В5 должно появиться число 0,05, так как товар не в продаже, продавец работает в отделе фурнитуры и стаж его работы 10 лет - все условия максимальных комиссионных выполнены.
Полный код процедуры Комиссионные представлен в листинге 6.2.
Листинг 6.2. Процедура Комиссионные
1:Public Sub Комиссионные()
2: Dim sngCommission As Single
3:
4: If Range (“B2”) = “Нет” Then
5: sngCommission = 0.02
6:
7: If Range (“B3”).Value >= 5 And Range (“B3”) < 10 Then
8: sngCommission = sngCommission + 0.01
9: ElseIf Range (“B3”).Value >= 10 Then
10: sngCommission = sngCommission + 0.02
11: End If
12:
13: If Range (“B1”).Value = “Фурнитура” Then
14: sngCommission = sngCommission + 0.01
15: End If
16:
17: Else
18: sngCommission = 0.01
19: End If
20:
21: If Range (“B5”).Value = sngCommission
22:
23:End Sub
Как обычно, процедура начинается с объявления переменной, в данном случае - переменной sngCommission. Эта переменная используется для вычисления комиссионных. Первое условие - проверка, находится или нет товар в продаже:
If Range (“B2”) = “Нет” Then
sngCommission = 0.02
Ячейка В2 содержит значение Да, если товар находится в продаже (комиссионные составляют 1%), и значение Нет - в противном случае (комиссионные составляют 2%):
Else
sngCommission = 0.01
End If
Если товар не находится в продаже, то проверяются следующие условия:
If Range (“B3”).Value >= 5 And Range(“B3”) < 10 Then
sngCommission = sngCommission + 0.01
ElseIf Range(“B3”) .Value >= 10 Then
sngCommission = sngCommission + 0.02
End If
If Range (“B1”).Value = “Фурнитура” Then
sngCommission = sngCommission + 0.01
End If
Здесь первый оператор If проверяет стаж работника. Второй оператор If определяет отдел, реализующий товар. Эти операторы вложены в первый оператор If процедуры.
В приведенных выше инструкциях по созданию процедуры специально указывалось, чтобы вы проверили, как введено слово Нет в ячейку В2. Чтобы понять, для чего это сделано, выполните следующие действия.
-
Вернитесь на рабочий лист с вычислениями комиссионных. Отметьте, что сейчас величина комиссионных составляет 0.05.
-
Введите нет (все буквы строчные) в ячейку В2.
-
Щелкните на кнопке Вычисление комиссионных. Какой размер комиссионных получили? 0,01. Почему?
-
Вернитесь в редактор Visual Basic и просмотрите код процедуры. Обратите внимание на выражение If Range (“B2”) = “Нет” в первом операторе If. Это выражение "чувствительно" к тому, в каком регистре введен текст в ячейке В2. Чтобы избавиться от этого недостатка, приведите код процедуры к следующему виду:
Public Sub Комиссионные()
Dim sngCommission As Single
If UCase(Range(“B2”)) = “НЕТ” Then
sngCommission = 0.02
If Range(“B3”).Value >= 5 And Range (“B3”) < 10
sngCommission = sngCommission + 0.01
ElseIf Range(“B3”).Value >= 10 Then
sngCommission = sngCommission + 0.02
End If
If UCase(Range(“B1”).Value) = "ФУРНИТУРА" Then
sngCommission = sngCommission + 0.01
End If
Else
sngCommission = 0.01
End If
If Range("B5").Value - sngCommission
End Sub
-
Вернитесь на рабочий лист и щелкните на кнопке Вычисление комиссионных. Процедура должна дать правильный результат.
Функция VBA UCase преобразует все символы текстового аргумента в верхний регистр. Благодаря этой функции операторы If перестали быть чувствительны к регистру вводимых данных. (В русской версии Excel (но не в VBA!) эта функция называется ПРОПИСН. - Прим. ред.)