- •Л.Н. Лядова, н.В. Фролова, в.В. Ланин, е.Б. Замятина, м.А. Плаксин, б.А. Ермолаев
- •Часть 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 Постановка задачи
- •Разработка документа
- •Разработка экранной формы
- •Список литературы
8.3.Представление данных и вычисления в таблицах Excel
Электронные таблицы предназначены для представления данных в виде таблиц, реализации вычислений в соответствии с формулами и правилами, задаваемыми пользователем.
Excel позволяет вводить данные в ячейки таблицы как непосредственно, так и через строку формул (в ячейке таблицы данные отображаются в соответствии с форматом, заданным для этой ячейки пользователем, а в строке формул – в том виде, в каком данные были введены). Для автоматизации ввода данных в Excel используются команды заполнения: ячейки можно заполнить путем копирования ранее введенных в некоторый диапазон значений, числовыми последовательностями (арифметической и геометрической прогрессиями), списками (в Excel определены списки, представляющие названия дней недели, месяцев, кроме того, пользователь может задать свои списки), последовательностями дат. Заполнение может выполняться как с помощью мыши, так и с помощью команды Заполнить меню Правка. Более подробную информацию о способах заполнения можно получить в разделе «Ввод данных» справочной системы.
Для автоматизации вычислений в ячейки таблицы помещаются формулы.
Между данными, расположенными в различных таблицах, могут быть установлены связи. Это позволяет автоматически обновлять связанные данные во всех таблицах при изменении исходных данных, что позволяет осуществлять ввод данных однократно, избежать дублирования, поддерживать целостность (согласованность) данных в нескольких таблицах.
Таблица Excel может быть получена путем консолидации данных из нескольких таблиц (исходных диапазонов).
Данные в ячейках таблицы отображаются в соответствии с заданным пользователем форматом. Для определения формата используются команды меню Формат.
8.3.1. Ссылки на ячейки рабочих листов Excel
Координаты (адрес ячейки, ссылка на нее) однозначно определяют ячейку или группу ячеек листа. Кроме того, можно ссылаться на ячейки, находящиеся на других листах книги или в другой книге, или на данные другого приложения. Ссылки на ячейки других книг называются внешними ссылками. Ссылки на данные других приложений называются удаленными ссылками.
Координаты текущей (активной) ячейки или ее имя (если имя определено) отображаются в поле со списком «Имя» в окне Excel. Введя координаты в это поле или выбрав имя из списка определенных имен, можно быстро перейти к нужной ячейке.
Ссылки на ячейки используются в формулах для выбора значений ячеек, используемых при вычислениях.
По умолчанию в Microsoft Excel используются ссылки вида “A1”, в которых столбцы обозначаются буквами от A до IV (256 столбцов максимально), а строки числами – от 1 до 65536). Чтобы указать ссылку на ячейку, вводится буква заголовка столбца, а затем номер строки. Например, D50 является ссылкой на ячейку, расположенную в пересечении столбца D с 50-й строкой.
Можно воспользоваться стилем ссылок, в котором и столбцы, и строки листа пронумерованы. Этот стиль, называемый “R1C1”, наиболее полезен при вычислении позиции строки и столбца в макросах, а также при отображении относительных ссылок. В стиле “R1C1”, после буквы ‘R’ указывается номер строки ячейки, после буквы ‘C’ – номер столбца.
Стиль ссылок можно изменить с помощью команды Параметры меню Сервис.
Excel может использовать относительные и абсолютные координаты ячеек.
Абсолютные координаты не изменяются, когда ячейка, содержащая формулу (в частности, функцию), копируется в другое место. Для указания абсолютных координат ячеек перед координатой (номером строки или названием столбца) следует поместить знак доллара (символ $), например: $B$5 (абсолютные координаты ячейки B5). В стиле “R1C1” указывается место размещения ячейки, где после буквы ‘R’ ставится номер строки ячейки, а после буквы ‘С’ – номер столбца. Например, абсолютная ссылка R1C1 эквивалентна абсолютной ссылке $A$1 для формата “A1”.
Однако в большинстве случаев удобно, чтобы при копировании содержимого ячейки, содержащей формулу со ссылками на другие ячейки, их координаты изменялись бы (например, значение ячейки – сумма значений предшествующих ей ячеек той же строки, если значения всех ячеек этого столбца вычисляются по той же формуле, то при ее копировании координаты ячеек, содержащих слагаемые, должны изменяться, настраиваясь на новый номер строки). При копировании формулы в другое место относительные координаты изменяются. При определении относительных координат знак доллара добавлять не нужно. Если ячейка A1 является текущей, то относительная ссылка R[1]C[1] в стиле “R1C1” указывает на ячейку, расположенную на одну строку ниже и на один столбец правее, то есть на ячейку B2.
Если при создании формулы используется диапазон ячеек, то он вводится в формулу в такой последовательности: координаты первой ячейки диапазона, двоеточие и координаты последней ячейки диапазона (например, B1:B5).
Если в формуле используются значения ячеек других рабочих листов, то соответствующие операнды должны иметь следующий формат: имя рабочего листа, восклицательный знак, координаты ячейки (например, Лист1!B5).
Для ссылки на ячейки другой рабочей книги используются «трехмерные» ссылки вида '[Книга.xls]Лист'!Диапазон.
Чтобы избежать использования координат, сделать ссылки на ячейки более наглядными, ячейке или диапазону ячеек можно присвоить имя, которое затем можно будет использовать вместо указания координат ячеек.
Для определения имени ячейки или диапазона используется команда ИмяПрисвоить меню Вставка. После создания именованного диапазона вместо координат его ячеек (например, при воде формул или выборе диапазона) можно использовать введенное имя.
Координаты ячеек (номера строки и столбца) являются свойствами объекта Range.
Свойством Range обладают объекты Application, Range и Worksheet. Значением этого свойства является объект Range. Для обращения к этому свойству необходимо записать выражение вида
Выражение.Range(Cell1, Cell2)
или
Выражение.Range(Cell)
где Cell – имя диапазона или ссылка, которая должна быть задана в A1‑стиле (задается как текстовая строка), или объект Range, который может содержать единственную ячейку, целый столбец или строку; Cell1 и Cell2 определяют ячнйки в левом верхнем и правом нижнем углах диапазона. Например, операторы
Worksheets(1).Range("A1:B3").Select
и
Worksheets(1).Range("A1", "B3").Select
позволяют выделить один и тот же диапазон рабочего листа. Если диапазону “A1:B3” присвоено имя (например, “Range_name”), оператор выделения диапазона можно записать так:
Worksheets(1).Range("Range_name")
Если Выражение не задано (т.е. для диапазона не указан квалифицирующий объект), то по умолчанию используется объект ActiveSheet, т.е. в качестве значения возвращается диапазон активного рабочего листа.
Свойство Range зависит от объекта Range. Например, если выделена ячейка C3, то результатом вычисления выражения
Selection.Range("B1")
станет ячейка D3 (используется относительная ссылка, результат вычисляется по отношению к текущему выделению), а выражение
ActiveSheet.Range("B1")
всегда вернет значение B1.
При реализации вычислений в Excel в различных контекстах бывает удобнее пользоваться различными способами ссылок на ячейки.
Свойство Cells (Cells(RowNum, ColumnNum)) используется, когда нужно указать единственную ячейку в строке и столбце с заданными номерами (индексами RowNum и ColumnNum). Например, следующий оператор устанавливает для ячейки A1 первого рабочего листа значение 100:
Worksheets(1).Cells(1, 1).Value = 100
В некоторых случаях данное свойство удобнее использовать, чем свойство Range, например, если для указания строки и/или столбца используются целочисленные переменные, значения которых пересчитываются в программе. При использовании же свойства Range необходимо выполнять преобразование целочисленных переменных к строковому типу для указания ссылки на ячейку.
Ссылка, возвращаемая как результат при вычислении
Выражение.Cells(Row, Column)
где Выражение возвращает объект Range, определяет ячейку по отношению к левому верхнему углу полученного диапазона. Например оператор
Range("C5:C10").Cells(1, 1).Formula = "=СУММ(C6:C10)"
заносит в первую ячейку указанного диапазона (C5) активного рабочего листа формулу для вычисления суммы значений, записанных в диапазоне “C6:C10”.
Свойство Offset (Offset(RowOffs, ColumnOffs)) используется, когда строка и столбец нужной ячейки определяются с помощью смещений (RowOffs и ColumnOffs)) по отношению к другой ячейке (диапазону). Например, после выполнения операторов
Application.Goto Reference:="R1C1"
Selection.Offset(3, 1).Range("A1").Select
выделенной окажется ячейка B4 (происходит смещение вниз на 3 строки и на один столбец вправо по отношению к ячейке, находящейся в левом верхнем углу выделенного диапазона).
Метод Union (Union(Range1, Range2, ...)) используется для получения диапазонов, которые могут состоять из двух и более прямоугольных блоков ячеек (прямоугольных диапазонов Range1, Range2, ...). В приведенном ниже примере создается объект, являющийся объединением двух диапазонов “A1:B2” и “C3:D4”, после чего эти диапазоны выделяются.
Dim R1 As Range, R2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set R1 = Range("A1:B2")
Set R2 = Range("C3:D4")
Set myMultiAreaRange = Union(R1, R2)
myMultiAreaRange.Select
Для выделения, которое состоит из более чем одной области, можно воспользоваться свойством Areas, которое позволяет разбить выделение на отдельные диапазоны и возвращает соответствующие обхекты как семейство. Количество объектов в семействе можно получить с помощью свойства семейства Count:
numberOfSelectedAreas = Selection.Areas.Count
Полученные с помощью ссылок объекты, их свойства и методы можно использовать в вычислениях с помощью формул, вводимых в ячейки рабочего листа Excel.
