- •Л.Н. Лядова, н.В. Фролова, в.В. Ланин, е.Б. Замятина, м.А. Плаксин, б.А. Ермолаев
- •Часть 2. Основы офисного программирования
- •Оглавление
- •Глава 6. Использование Win32 api 113
- •Глава 7. Использование шаблонов и надстроек 118
- •Глава 8. Разработка приложений с помощью Excel 122
- •Глава 9. Разработка приложений с помощью Word 223
- •Глава 10. Использование Automation при интегрировании компонентов Microsoft Office 256
- •Глава 11. Организация доступа к внешним данным 279
- •Глава 12. Общие рекомендации по разработке приложений 297
- •Глава 13. Разработка справочной системы 298
- •Глава 14. Дополнительные рекомендации 301
- •Пояснительная записка
- •Уровень предварительной подготовки слушателей
- •Образовательные цели и задачи
- •Знания и навыки, получаемые в ходе изучения курса
- •Содержание занятий
- •Вопросы для самостоятельного изучения
- •Содержание лабораторных работ
- •Итоговые работы
- •Введение
- •Глава 1.Общая характеристика возможностей vba
- •Глава 2.Основные принципы разработки приложений
- •Глава 3.Основные правила разработки интерфейса
- •Глава 4.Visual Basic для приложений
- •Глава 5.Введение в язык и редактор Visual Basic
- •5.1.Окно Редактора Visual Basic
- •5.2.Основные правила записи программ на vba
- •5.2.1. Описания в программах на языке vba
- •5.2.2. Структуризация программ vba и правила записи кода процедур
- •5.2.3. Использование параметров
- •5.2.4. Типы данных vba
- •5.2.5. Описания переменных
- •5.2.6. Объекты в программах на vba и объектные переменные
- •5.2.7. Создание объектов пользователя
- •5.2.8. Описание и использование констант
- •5.2.9. Массивы в vba
- •5.2.10. Описание типов данных пользователя
- •5.2.11. Запись выражений на vba
- •5.2.12. Рекурсивные вычисления
- •5.2.13. Процедуры-подпрограммы
- •5.2.14. Процедуры-функции
- •5.2.15. Процедуры-свойства
- •5.2.16. Создание процедур
- •5.2.17. Управляющие структуры vba и события
- •5.3.Запуск программ
- •5.4.Отладка программ
- •5.5.Обработка ошибок
- •5.6.Преобразования типов
- •5.7.Функции для работы с датами и временем
- •5.8.Управление файлами
- •5.9.Функции проверки
- •5.10.Функции работы со строками
- •5.11.Взаимодействие с пользователем
- •5.12.Пользовательские формы и диалоговые окна
- •5.13.Создание пользовательских меню и панелей инструментов
- •5.14.Разработка контекстного меню
- •5.15.Открытие проектов, экспорт и импорт
- •Глава 6.Использование Win32 api
- •Глава 7.Использование шаблонов и надстроек
- •Глава 8.Разработка приложений с помощью Excel
- •8.1.Иерархия объектов Excel
- •8.2.Обзор основных объектов Excel
- •8.2.1. Объект Application
- •8.2.2. Объект Workbook
- •8.2.3. Объект WorkSheet
- •8.2.4. Объект Range
- •8.2.5. Графические объекты
- •8.2.6. Элементы управления и обработка событий
- •8.3.Представление данных и вычисления в таблицах Excel
- •8.3.1. Ссылки на ячейки рабочих листов Excel
- •8.3.2. Работа с формулами
- •8.3.3. Использование функций
- •8.3.4. Создание пользовательских функций рабочего листа
- •8.3.5. Массивы Excel
- •8.3.6. Определение связей между таблицами
- •8.3.7. Консолидация данных
- •8.3.8. Форматирование данных в таблицах
- •8.4.Анализ данных и подведение итогов
- •8.4.1. Создание сводных таблиц
- •8.4.2. Подведение промежуточных итогов
- •8.4.3. Определение частичных сумм
- •8.4.4. Создание диаграмм
- •8.4.5. Работа со структурой данных
- •8.5.Подбор параметров и поиск решения
- •8.6.Использование сценариев
- •8.7.Поиск и отбор данных в таблицах Excel
- •8.7.1. Использование автофильтра
- •8.7.2. Работа с расширенным фильтром
- •8.7.3. Поиск данных по подписям строк и столбцов
- •8.8.Упорядочение данных в таблицах
- •8.9.Защита приложений Excel
- •8.9.1. Защита от ошибок при вводе данных
- •8.9.2. Защита данных от несанкционированного доступа
- •Глава 9.Разработка приложений с помощью Word
- •9.1.Модель объектов Word
- •9.1.1. Объект Document
- •9.1.2. Другие дочерние объекты приложения Word
- •9.2.Работа с полями
- •9.3.Переменные документа
- •9.4.Использование формул в документах Word
- •9.5.Использование элементов управления в документах Word
- •9.6.Создание шаблонов документов на основе таблиц
- •9.7.Защита документов Word и кода
- •Глава 10.Использование Automation при интегрировании компонентов Microsoft Office
- •10.1.Технология ActiveX
- •10.2.Компонентная модель объектов, внедрение и связывание
- •10.3.Создание объектов Automation
- •10.4.Получение доступа к объекту
- •10.5.Пример вычислений в Access с помощью Excel
- •10.6.Управление связанными и внедренными объектами с помощью программного кода
- •Глава 11.Организация доступа к внешним данным
- •11.1.Доступ к данным из клиентских приложений
- •11.2.Интерфейс odbc
- •11.3.Использование dao для доступа к данным
- •11.3.1. Модель объектов dao
- •11.3.2. Создание рабочей области и открытие источника данных
- •11.3.3. Исследование структуры таблиц бд
- •11.3.4. Операции над данными
- •11.4.Интеграция данных и работа в сети
- •11.4.1. Доступ к данным Excel из субд Access
- •11.5.Выбор метода доступа к данным
- •Глава 12.Общие рекомендации по разработке приложений
- •Глава 13.Разработка справочной системы
- •13.1.Использование всплывающих подсказок
- •13.2.Контекстная справка «Что это такое?»
- •13.3.Подготовка файла справки
- •Глава 14.Дополнительные рекомендации Установка приложения
- •14.1.Повышение эффективности работы приложения
- •Приложение 1. Система автоматизации подготовки документов на основе пакета Microsoft Office
- •Требования к системе Office case
- •Интеллектуальность документа
- •Однократный ввод данных и их совместное использование
- •Дружественный интерфейс – «ориентация на человека»
- •Мобильность
- •Независимость от версии Microsoft Office
- •Поддержка языка разметки документов xml
- •Общий сценарий использования
- •Структура Office case
- •Структура скрытого раздела документа
- •В. Таблица ограничений
- •Подсистемы программного проекта документа Менеджер закладок
- •Менеджер классификаторов
- •Подсистема управления интерфейсом пользователя
- •Подсистема контроля данных
- •Подсистема информационного обмена
- •Дизайнер системы документов
- •Редактор классификаторов
- •Редактор правил
- •Редактор закладок
- •Редактор блоков данных
- •Пример применения Office case Постановка задачи
- •Реализация Документы «Подсистемы автоматизации подготовки отчетов»
- •Требования к квалификации пользователей
- •Установка приложения и подготовка к работе
- •Интерфейс первичных документов
- •Интерфейс сводных документов
- •Приложение 2. Автоматизированное рабочее место «Оператор автозаправочной станции»
- •Разработка структуры рабочей книги
- •Настройка пользовательского интерфейса
- •Разработка экранных форм
- •Приложение 3. Автоматизация заполнения бланка с помощью программы текстового процессора Word Постановка задачи
- •Разработка документа
- •Разработка экранной формы
- •Список литературы
Разработка структуры рабочей книги
Рабочая книга приложения будет состоять из трех листов: главного листа, служебного и листа, содержащего информацию о работниках станции. На главном листе будет размещена основная для пользователя информация, элементы управления и команды, обеспечивающие основные функции приложения. Второй лист будет содержать справочную и служебную информацию, он будет скрыт от пользователя. На третьем листе поместим информацию о персонале, он также будет скрыт от пользователя, доступ к нему будет организован только через экранную форму.
Подготовим главный лист приложения, поместив таблицу, диаграмму, командные кнопки для продажи топлива. Таблица будет содержать текущие цены на топливо, диаграмма будет отобрать состояние резервуаров.
Добавим таблицу цен на топливо, как показано ниже. Диапазону цен из четырех ячеек присвоим имя rgFuelPrice, что упростит обращение к этим данным.
Тип топлива |
Цена за литр |
Аи-76 |
10,00р. |
Аи-92 |
14,00р. |
Аи-95 |
16,00р. |
ДТ |
12,00р. |
На второй лист книги поместим таблицу «Резервуары», содержащую информацию о состоянии резервуаров, и построим на ее базе диаграмму, которую разместим на первом листе.
Тип топлива |
Вместимость (л) |
Заполнено (л) |
Аи-76 |
20000 |
14982 |
Аи-92 |
20000 |
16139 |
Аи-95 |
20000 |
14900 |
ДТ |
20000 |
6000 |
Также на второй лист поместим небольшой справочник, данные которого будут использованы при работе экранных форм.
Должности |
Кассир |
Оператор |
Техник |
Также разместим на главном рабочем листе 8 командных кнопок для продажи топлива на соответствующей колонке. Для этого необходимо отобразить панель «Элементы управления» и нажать на ней кнопку «Режим конструктора». Затем разместить необходимые элементы управления. Первый лист рабочей книги примет вид показанный ниже.
Рис. ХХ. Размещение объектов на главном листе приложения
На третьем листе книги поместим информацию о персонале автозаправочной станции в следующей таблице.
Фамилия |
Имя |
Отчество |
Пол |
Дата рождения |
Должность |
Разряд |
Иванов |
Сидор |
Петрович |
Мужской |
03.12.1980 |
Кассир |
1 |
Петров |
Иван |
Сидорович |
Мужской |
04.12.1980 |
Кассир |
2 |
Мы разработали структуру рабочей книги, подготовив все необходимое для следующих этапов разработки нашего приложения.
Настройка пользовательского интерфейса
Прежде всего, необходимо заменить стандартный интерфейс Excel, добавив команды меню и панели инструментов, необходимые для данного приложения, и удалив неиспользуемые команды, строку формул, заголовки строк и столбцов, ярлычки листов.
Скроем видимые панели инструментов, обратившись к свойству Enabled панелей инструментов. При установке данного свойства в значение False панель скрывается с экрана и удаляется из списка панелей, которые пользователь может отобразить при выполнении команды «Настройка…». В приведенном ниже коде скрываются все панели приложения. Данный способ эффективнее, чем обращение к свойству Visible панели инструментов, т.к. при завершении работы приложения при установке Enabled в True будут восстановлены именно те панели, которые были видны при запуске программы.
Dim cb As CommandBar
For Each cb In Application.CommandBars
cb.Enabled = False
Next cb
Далее удалим стандартные элементы интерфейса Excel. Основные объекты, к которым мы обращаемся, объект Application, представляющий приложение в целом, и объект ActiveWindow, который соответствует окну рабочей книги. Данный код лучше оформить в виде отдельной процедуры, получающей в качестве параметра логическое значение – отобразить или убрать соответствующие элементы управления.
With Application
.DisplayFormulaBar = False
.DisplayScrollBars = False
.DisplayStatusBar = False
.Caption = "АРМ"
With .ActiveWindow
.DisplayGridlines = False
.DisplayWorkbookTabs = False
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.Caption = "Управление АЗС"
End With
End With
Добавим панель инструментов и разместим необходимые команды. Ниже представлен внешний вид панели инструментов и программный код, создающий данную панель.
Рис. ХХ. Панель инструментов приложения
Set cmdbar = Application.CommandBars.Add("Management", msoBarTop)
Application.CommandBars.DisableCustomize = True
Dim but As CommandBarButton
With cmdbar
.Protection = msoBarNoCustomize
Set but = .Controls.Add(msoControlButton)
but.OnAction = "Getgaz"
but.Style = msoButtonCaption
but.Caption = "Получить бензин"
Set but = .Controls.Add(msoControlButton)
but.OnAction = "Sellgaz"
but.Style = msoButtonCaption
but.Caption = "Продать бензин"
Set but = .Controls.Add(msoControlButton)
but.OnAction = "Changeprice"
but.Style = msoButtonCaption
but.Caption = "Сменить цены"
…
End With
Первоначально к коллекции CommandBars мы добавляем новый элемент – новую панель инструментов. Коллекция Controls добавленной панели инструментов содержит все элементы управления, расположенные на данной панели. Таким образом, для добавления новых кнопок необходимо добавить к данной коллекции новый элемент. Кроме обыкновенных кнопок на панели инструментов могут находиться более сложные элементы управления (см таблицу).
Значение Type |
Возвращаемый класс объекта |
msoControlButton (командная кнопка) |
CommandBarButton |
msoControlEdit (поле редактирования) |
CommandBarComboBox |
msoControlDropdown (выпадающий список) |
CommandBarComboBox |
msoControlComboBox (комбинированный список) |
CommandBarComboBox |
msoControlPopup (контекстное меню) |
CommandBarPopup |
Действия, выполняемые командой, должны быть запрограммированы в виде процедуры. Для передачи информации в исполняемый макрос можно использовать параметр Parameter, задаваемый при создании элемента или, что удобнее, свойство Parameter. Свойство OnAction, которым обладают все элементы панели, позволяет связать элемент с исполняемым макросом. Формально свойство является строкой, задающей имя макроса, который и будет вызываться в ответ на выбор пользователя.
Описанные выше блоки кода необходимо поместить в обработчик события Workbook_Open, т.е. на открытие рабочей книги. Интерфейс Excel будет заменяться каждый раз при открытии рабочей книги. Очевидно, что при закрытии книги (событие Workbook_BeforeClose) необходимо выполнить обратные действия – восстановить исходный интерфейс. Приложение должно руководствоваться принципом: «Меня здесь не было», т.е. полностью восстановить все параметры, которые оно изменило. Иначе, у пользователя использующего наше приложение и незнающего VBA могут возникнуть значительные проблемы, например, при исчезновении главного меню программы.
