- •Что такое 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-му часу Тесты
- •Упражнение
Вопросы и ответы
Вопрос. Где надо определить переменную, чтобы можно было бы воспользоваться ею не только в текущей процедуре?
Ответ. Такую глобальную переменную надо объявить в области общих объявлений модуля. Как объявить - зависит от расположения ваших процедур. Если все процедуры находятся в одном модуле, то можно использовать оператор Dim. Если процедуры локализованы в нескольких модулях, следует воспользоваться оператором Public.
Вопрос. Модули хранятся отдельно от рабочих книг?
Ответ. Нет, модули являются частью рабочих книг. При сохранении рабочих книг сохраняются все изменения, сделанные в модуле.
Вопрос. Почему нельзя объявить все переменные как Variant?
Ответ. Можно, но следует помнить, что переменные этого типа потребляют много системных ресурсов, кроме того, неправильное применение этого типа данных может негативно сказаться на производительности вашего приложения.
Практикум
С помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении.
Тесты
-
Назовите три уровня видимости переменных.
-
Переменную какого типа необходимо использовать для хранения целых чисел из диапазона от 0 до 100?
-
Какое максимальное количество символов можно использовать при задании имен процедур, переменных и констант?
-
Истинно или ложно следующее утверждение: имя процедуры может начинаться с числа?
-
Где объявляются глобальные переменные?
-
Истинно или ложно следующее утверждение: константы можно определить только в процедуре?
-
Какую функциональную клавишу следует нажать для выполнения процедуры в редакторе Visual Basic?
Упражнение
Создайте новую процедуру с именем ПеремИКонст. Создайте переменную с именем sTest типа String. Создайте константу с именем iNumber типа Integer и положите ее равной 2. Установите значение переменной sTest как “Это простой тест”. Добавьте в процедуру следующие две строчки кода, чтобы вывести на экран значения переменной sTest и константы iNumber:
MsgBox “Значение переменной sTest: “ & sTest
MsgBox “Значение константы iNumber: “ & iNumber
Выполните процедуру.
5-й час. Ввод данных
В предыдущих часах в примерах, иллюстрирующих различные темы, несколько раз использовались операторы MsgBox и InputBox. В этом часе мы подробно изучим эти операторы и методы их применения в кодах VBA. В 1-м часе "Знакомство с Visual Basic for Applications" обсуждались ограничения, присущие записанным макросам. Одно из таких ограничений - невозможность ввести какую-либо информацию во время выполнения макроса. В этом часе мы покажем, как организовать ввод информации при выполнении приложения.
В этом часе будут рассмотрены следующие вопросы.
-
Использование функции MsgBox.
-
Использование функции InputBox.
-
Применение метода InputBox.
-
Именование аргументов.
-
Использование объединения текстовых строк.
Функция MsgBox
Посмотрите на рис. 5.1, на котором показано, что произойдет, если вы попытаетесь закрыть рабочую книгу без ее сохранения.
Вы можете подумать, что создание такого окна сообщения требует многих часов программирования. Заблуждаетесь! Такое окно можно создать с помощью всего одной строчки кода VBA:
MsgBox "Сохранить изменения в ' “ & ThisWorkbook.Name & “ '? “, _
vbYesNoCancel + vbExclamation
Отметим, что оператор MsgBox записан здесь в две строки, хотя в окне кода редактора Visual Basic он может располагаться в одну строку. В VBA символами продолжения строки служит пробел с последующим символом подчеркивания.
Рис. 5.1. Одно из многих окон сообщений, генерируемых Excel
В этом коде свойство ThisWorkbook.Name возвращает имя текущей рабочей книги.
Функция MsgBox служит для организации диалоговых окон, содержащих какие-либо сообщения. После своего появления на экране окно сообщения ждет, пока пользователь щелкнет на одной из кнопок, присутствующих в окне. В зависимости от того, на какой кнопке щелкнул пользователь, функция возвращает определенное целое число. Функция MsgBox имеет следующий синтаксис:
MsgBox (приглашение [, кнопки] [, заголовок] [, файл_справки, содержание])
Приглашение (prompt) - единственный обязательный аргумент этой функции. Значением этого аргумента служит строка текста, которая появляется как сообщение в диалоговом окне. Эта строка текста должна быть заключена в двойные кавычки. Отметим использование круглых скобок в синтаксисе MsgBox - они указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение. Если скобки опушены, то для VBA это признак того, что данное выражение значение не возвращает. Если вы хотите возвратить значение, надо использовать код, подобный следующему:
Dim iResponse As Integer
iResponse = MsgBox (“Сохранить изменения в ‘ ” &_
ThisWorkbook.Name & “ ‘?”, vbYesNoCancel + vbExclamation)
Если не указан аргумент кнопки, то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент кнопки - очень "богатый" по своим возможностям аргумент, который позволяет управлять следующими параметрами окна сообщения.
-
Количество кнопок в окне.
-
Типы кнопок и их размещение в окне.
-
Пиктограмма, отображаемая в окне.
-
Какая кнопка назначается кнопкой по умолчанию.
-
Режим (модальность) окна сообщения.
В табл. 5.1 показаны возможные установки для этого аргумента. В этой таблицы значения аргумента разбиты на группы. Первая группа значений устанавливает число и тип кнопок. Вторая позволяет выбрать стиль пиктограммы, отображаемой в диалоговом окне сообщения. Третья назначает кнопку по умолчанию. Четвертая группа устанавливает режим окна сообщения. Для создания конечного значения аргумента кнопки можно использовать только одно значение из каждой группы, объединив их знаком "плюс".
Таблица 5.1. Установки для аргумента кнопки функции MsgBox
Группа |
Константа |
Значение |
Описание |
Группа 1 |
vbOKOnly |
0 |
Отображает только кнопку ОК (установка по умолчанию) |
vbOKCancel |
1 |
Отображает кнопки ОК и Отмена1 |
|
vbAbortRetryIgnore |
2 |
Отображает кнопки Стоп, Повтор и Пропустить |
|
voYesNoCancel |
3 |
Отображает кнопки Да, Нет и Отмена |
|
vbYesNo |
4 |
Отображает кнопки Да и Heт |
|
vbRetryCancel |
5 |
Отображает кнопки Повтор и Отмена |
|
Группа 2 |
vbCritical |
16 |
Отображает запрещающую пиктограмму (белый знак × в красном круге) |
vbQuestion |
32 |
Отображает предупреждающую пиктограмму (знак вопроса на белом фоне) |
|
vbExclamation |
48 |
Отображает предупреждающую пиктограмму (знак вопроса в красном треугольнике) |
|
vbInformation |
64 |
Отображает информационную пиктограмму (знак "i" на белом фоне) |
|
Группа 3 |
vbDefaultButton1 |
0 |
Первая кнопка - кнопка по умолчанию |
vbDefaultButton2 |
256 |
Вторая кнопка - кнопка по умолчанию |
|
vbDefaultButton3 |
512 |
Третья кнопка - кнопка по умолчанию |
|
vbDefaultButton4 |
768 |
Четвертая кнопка - кнопка по умолчанию |
|
Группа 4 |
vbApplicationModal |
0 |
Режим приложения: пользователь должен закрыть окно сообщения перед продолжением работы в текущем приложении |
vbSystemModal |
4096 |
Системный режим: все приложения недоступны, пока пользователь не закроет окно сообщения |
|
Дополнительная группа |
vbMsgBoxHelpButton |
16384 |
Отображает кнопку Справка |
vbMsgBoxSetForeground |
65536 |
Делает окно сообщения окном переднего плана |
|
vbMsgBoxRight |
524288 |
Отображает окно сообщения, выровненным по правому краю окна приложения |
|
vbMsgBoxRtlReading |
1048576 |
Для иврита и арабского языка указывает, что текст должен выводиться справа налево |
Чтобы не ошибиться при вводе значений аргумента кнопки, используйте список констант, который появляется после ввода знака "+". Знак "+" используется для объединения нескольких констант при задании сложного аргумента кнопки. - Прим. ред.
Чтобы просмотреть список всех внутренних констант Visual Basic, откройте с помощью клавиши <F2> окно просмотра объектов Object Browser и выберите класс Constants (Константы). В этом же окне можно найти все внутренние константы Excel.
Аргумент заголовок позволяет задать текст, помещаемый в строке заголовка диалогового окна сообщения. Если этот аргумент опущен, то в строке заголовка отображается Microsoft Excel.
Аргументы файл_справки и содержание используются тогда, своего приложения для своего приложения собственную справочную систему.
Напомню, что сейчас мы рассматриваем MsgBox как функцию, это подразумевает, что она должна возвращать значение. В табл. 5.2 представлен список значений, возвращаемых функцией MsgBox. Возвращаемое значение зависит от того, на какой кнопке щелкнул пользователь в окне сообщения.
Таблица 5.2. Значения, возвращаемые функцией
Константа |
Значение |
Нажатая кнопка |
vbOK |
1 |
ОК |
vbCancel |
2 |
Отмена |
vbAbort |
3 |
Стоп |
vbRetry |
4 |
Повтор |
vbIgnore |
5 |
Пропустить |
vbYes |
6 |
Да |
vbNo |
7 |
Нет |
Глядя на эту таблицу, вы можете задать вопрос: "Какой тип данных надо назначить переменной, которая будет принимать возвращаемое функцией MsgBox значение?". Наилучший тип переменной, принимающей значение функции MsgBоx, - Integer. В следующем примере мы создадим окно сообщения с несколькими кнопками, а затем покажем возвращаемое значение в другом окне сообщения.
-
Откройте редактор Visual Basic.
-
Щелкните правой кнопкой мыши на элементе ЭтаКнига в окне проектов Project Explorer.
-
В контекстном меню выберите команду Inserts Module (Вставка Модуль).
-
Выполните команду Insert Procedure (Вставка Процедура).
-
Введите название процедуры ПримерОСообщения и нажмите клавишу <Enter>.
-
Введите следующий код процедуры:
Dim iResult As Integer
iResult = MsgBox(“Щелкните на кнопке”, vbYеsNoCancel)
MsgBox iResult
-
Нажмите клавишу <F5> для выполнения процедуры. Отобразится окно сообщения, как на рис. 5.2.
Рис. 5.2. В соответствии с заданными аргументами окно сообщения содержит три кнопки
-
Щелкните на кнопке Да. Следующее диалоговое окно должно вывести цифру 6. Посмотрите в табл. 5.2, чтобы удостовериться, что число 6 - результат щелчка на кнопке Да. Щелкните на кнопке ОК, второе окно сообщения закроется, и вы вернетесь в редактор Visual Basic.
-
Снова нажмите клавишу <F5> для выполнения процедуры. Теперь в окне сообщения щелкните на кнопке Нет. Во втором окне сообщения отобразится цифра 7. Для возврата в редактор Visual Basic щелкните на кнопке ОК.
-
Нажмите клавишу <F5> еще раз. В окне сообщения щелкните на кнопке Отмена. Во втором окне сообщения отобразится цифра 2. Щелкните на кнопке ОК.
Теперь вы знаете, как показать значение, возвращаемое окном сообщения. В 6-м часе "Логика условных операторов" вы узнаете, как можно использовать это значение.