- •Об авторе
- •Введение
- •Глава 1. Excel 2010: история программы
- •Краткая история электронных таблиц
- •Все начиналось с VisiCalc
- •Quattro Pro
- •Microsoft Excel
- •Почему программа Excel так удобна разработчикам
- •Место Excel в стратегии Microsoft
- •Объектное мышление
- •Рабочие книги
- •Рабочие листы
- •Листы диаграмм
- •Листы макросов XLM
- •Пользовательский интерфейс Excel
- •Ввод данных
- •Формулы, функции и имена
- •Выделение объектов
- •Форматирование
- •Глава 3. Особенности формул
- •О формулах
- •Вычисление формул
- •Ссылки на ячейки и диапазоны
- •Зачем нужны неотносительные ссылки
- •Ссылки на другие листы или рабочие книги
- •Применение имен к существующим ссылкам
- •Пересечение имен
- •Присвоение имен столбцам и строкам
- •Определение области действия
- •Присвоение имен константам
- •Присвоение имен объектам
- •Ошибки в формулах Excel
- •Формулы массивов
- •Пример формулы массива
- •Создание календаря с помощью формулы массива
- •Достоинства и недостатки формул массивов
- •Примеры формул суммирования
- •Другие инструменты подсчета
- •Работа со значениями даты и времени
- •Использование дат до 1900 года
- •Создание мегаформул
- •Глава 4. Файлы Excel
- •Запуск Excel
- •Типы файлов
- •Форматы файлов Excel
- •Форматы текстовых файлов
- •Форматы файлов баз данных
- •Другие форматы файлов
- •Создание шаблонов
- •Создание шаблонов рабочих книг
- •Файл XLB
- •Файлы надстроек
- •Настройки Excel
- •Глава 5. Приложения электронных таблиц
- •О приложениях электронных таблиц
- •Разработчик и конечный пользователь
- •Кто такие разработчики и чем они занимаются
- •Классификация пользователей электронных таблиц
- •Для кого предназначены приложения электронных таблиц
- •Решение проблем с помощью Excel
- •Основные типы электронных таблиц
- •Однопользовательские приложения
- •Приложения-утилиты
- •Надстройки с функциями рабочих листов
- •Одноблоковые бюджеты
- •Электронные таблицы для хранения данных и доступа к ним
- •Клиентские приложения баз данных
- •Глава 6. Принципы разработки приложений электронных таблиц
- •Этапы разработки приложения
- •Определение потребностей пользователя
- •Проектирование приложения с учетом потребностей пользователя
- •Определение удобного пользовательского интерфейса
- •Работа с конечным пользователем
- •Тестирование приложения
- •Создание привлекательных и интуитивно понятных приложений
- •Документирование усилий, затраченных на разработку
- •Распространение приложения среди пользователей
- •Обновление приложения
- •Другие вопросы разработки приложений
- •Версия Excel, установленная у пользователя
- •Трудности, касающиеся поддержки языка
- •Видеорежимы
- •Глава 7. Введение в VBA
- •Основы языка BASIC
- •Обзор VBA
- •Объектные модели
- •Сравнение VBA и XLM
- •Основы VBA
- •Работа с Project Explorer
- •Добавление нового модуля VBA
- •Удаление модуля VBA
- •Экспорт и импорт объектов
- •Работа с окнами кода
- •Сворачивание и восстановление окон
- •Сохранение кода VBA
- •Ввод кода VBA
- •Настройка среды VBE
- •Что записывается
- •Параметры записи
- •Улучшение записанных макросов
- •Об объектах и коллекциях
- •Иерархия объектов
- •О коллекциях
- •Ссылки на объекты
- •Свойства и методы
- •Свойства объекта
- •Методы объекта
- •Свойства объекта Comment
- •Методы объекта Comment
- •Коллекция Comments
- •Работа с объектами Range
- •Свойство Range
- •Свойство Offset
- •Что следует знать об объектах
- •Важные концепции для запоминания
- •Узнайте больше об объектах и свойствах
- •Обзор элементов и конструкций VBA
- •Комментарии
- •Переменные, типы данных и константы
- •Определение типов данных
- •Объявление переменных
- •Работа с константами
- •Операторы присваивания
- •Массивы
- •Объявление массивов
- •Объявление многомерных массивов
- •Объявление динамических массивов
- •Объектные переменные
- •Пользовательские типы данных
- •Встроенные функции
- •Управление объектами и коллекциями
- •Конструкция With - End With
- •Конструкция For Each - Next
- •Контроль за выполнением кода
- •Конструкция Select Case
- •Циклическая обработка инструкций
- •Глава 9. Работа с процедурами VBA
- •О процедурах
- •Объявление процедуры Sub
- •Область действия процедуры
- •Выполнение процедуры
- •Выполнение процедуры с помощью ленты
- •Выполнение процедуры из пользовательского контекстного меню
- •Выполнение процедуры из другой процедуры
- •Выполнение процедуры по щелчку на объекте
- •Выполнение процедуры по событию
- •Выполнение процедуры в окне отладки
- •Передача аргументов процедурам
- •Обработка ошибок
- •Перехват ошибок
- •Реальный пример
- •Цель
- •Требования к проекту
- •Исходные данные
- •Подход
- •Что необходимо знать
- •Написание кода
- •Создание процедуры сортировки
- •Устранение проблем
- •Доступность
- •Глава 10. Создание функций
- •Процедуры и функции
- •Назначение пользовательских функций
- •Простой пример функции
- •Анализ пользовательской функции
- •Синтаксис функции
- •Область действия функции
- •Аргументы функций
- •Примеры функций
- •Функции без аргументов
- •Функция с одним аргументом
- •Функция с двумя аргументами
- •Функция с аргументом в виде массива
- •Функция с необязательными аргументами
- •Функция VBA, возвращающая массив
- •Функция с неопределенным количеством аргументов
- •Расширенные функции для работы с датами
- •Отладка функций
- •Определение категории функции
- •Использование надстроек для хранения пользовательских функций
- •Использование функций Windows API
- •Примеры функций Windows API
- •Определение папки Windows
- •Определение состояния клавиши <Shift>
- •Дополнительная информация о функциях Windows API
- •Учимся на примерах
- •Работа с диапазонами
- •Копирование диапазона
- •Перемещение диапазона
- •Подсчет выделенных ячеек
- •Определение типа выделенного диапазона
- •Удаление всех пустых строк
- •Дублирование строк
- •Чтение и запись диапазонов
- •Перенесение одномерных массивов
- •Перенесение диапазона в массив типа Variant
- •Выбор ячеек по значению
- •Копирование несмежных диапазонов
- •Управление рабочими книгами и листами
- •Сохранение всех рабочих книг
- •Синхронизация рабочих книг
- •Методы программирования на VBA
- •Переключение значения булева свойства
- •Определение количества страниц для печати
- •Отображение списка шрифтов
- •Обработка последовательности файлов
- •Полезные функции для программ VBA
- •Функция FileExists
- •Функция FileNameOnly
- •Функция PathExists
- •Функция RangeNameExists
- •Функция SheetExists
- •Получение значения из закрытой рабочей книги
- •Полезные функции в формулах Excel
- •Получение информации о форматировании ячейки
- •Беседа с рабочим листом
- •Отображение даты сохранения файла или вывода файла на печать
- •Основы иерархии объектов
- •Подсчет количества ячеек между двумя значениями
- •Соответствует ли строка шаблону
- •Возвращение из строки n-го элемента
- •Возвращение максимального значения всех рабочих листов
- •Возвращение массива случайных целых чисел без повторов
- •Расположение значений диапазона в произвольном порядке
- •Определение текущего видеорежима
- •Чтение и запись параметров системного реестра
- •Глава 12. Создание собственных диалоговых окон
- •Перед созданием диалоговых окон...
- •Использование окон ввода данных
- •Функция VBA MsgBox
- •Отображение формы ввода данных с помощью VBA
- •CommandButton
- •Frame
- •Image
- •Label
- •ListBox
- •MultiPage
- •OptionButton
- •RefEdit
- •ScrollBar
- •SpinButton
- •TabStrip
- •TextBox
- •ToggleButton
- •Настройка элементов управления пользовательского диалогового окна
- •Общие свойства
- •Отображение пользовательского диалогового окна
- •Отображение немодальной формы
- •Отображение пользовательского диалогового окна на основе значения переменной
- •Загрузка пользовательского диалогового окна
- •О процедурах обработки событий
- •Закрытие пользовательского диалогового окна
- •Пример создания пользовательского диалогового окна
- •Создание пользовательской формы
- •Создание кода для отображения диалогового окна
- •Проверка правильности введенных данных
- •События объекта UserForm
- •События объекта UserForm
- •События элемента управления SpinButton
- •Ссылка на элементы управления пользовательского диалогового окна
- •Настройка панели инструментов Toolbox
- •Добавление новых страниц
- •Настройка или комбинирование элементов управления
- •Вопросы для самоконтроля
- •Создание заставки
- •Отключение кнопки закрытия пользовательского диалогового окна
- •Изменение размера диалогового окна
- •Добавление опций в элемент управления ListBox
- •Определение выделенного элемента списка
- •Определение нескольких выделенных элементов списка
- •Работа с многоколоночными элементами управления ListBox
- •Использование элемента управления ListBox для выделения строк на листе
- •Использование элемента управления ListBox для активизации листа
- •Использование внешних элементов управления
- •Глава 15. Дополнительные приемы работы с пользовательскими формами
- •Отображение индикатора текущего состояния
- •Создание мастеров
- •Программирование зависимостей
- •Выполнение задачи
- •Имитация работы функции MsgBox
- •Несколько кнопок с одной процедурой обработки событий
- •Глава 16. Разработка утилит Excel с помощью VBA
- •Об утилитах Excel
- •Создание утилит с помощью VBA
- •Признаки хорошей утилиты
- •Утилита Text Tools
- •Рабочая книга утилиты
- •Как работает утилита
- •Оценка проекта
- •Принципы работы утилиты
- •Дополнительно об утилитах Excel
- •Глава 17. Работа со сводными таблицами
- •Вводный пример
- •Просмотр созданного кода
- •Код сводной таблицы
- •Создание обратной сводной таблицы
- •Кратко о диаграммах
- •Создание внедренной диаграммы
- •Размещение диаграммы на листе диаграммы
- •Активизация диаграммы с помощью кода VBA
- •Деактивизация диаграммы
- •Определение активности диаграммы
- •Изменение размеров и выравнивание диаграмм
- •Экспорт диаграммы
- •События диаграмм
- •Поддержка событий для встроенных диаграмм
- •Тонкости создания диаграмм
- •Печать встроенных диаграмм на всю страницу
- •Отображение/сокрытие рядов данных
- •Создание фиксированной диаграммы
- •Анимирование диаграмм
- •Прокрутка диаграммы
- •Глава 19. Концепция событий Excel
- •Типы событий Excel
- •Понимание последовательности событий
- •Отключение событий
- •Ввод кода процедуры обработки события
- •События уровня объекта Workbook
- •Событие Open
- •Событие Activate
- •Событие SheetActivate
- •Событие NewSheet
- •Событие Deactivate
- •Событие BeforePrint
- •Событие Change
- •Включение событий уровня объекта Application
- •Определение факта открытия рабочей книги
- •События объекта UserForm
- •Запуск другого приложения из Excel
- •Использование функции Shell
- •Использование API-Функции ShellExecute
- •Инструкция AppActivate
- •Работа с внешними объектами
- •Раннее и позднее связывание
- •Простой пример позднего связывания
- •Использование метода SendKeys
- •Глава 21. Создание и использование надстроек
- •Определение надстройки
- •Основные причины создания надстроек
- •Создание надстройки
- •Пример надстройки
- •Установка надстройки
- •Тестирование надстройки
- •Распространение надстройки
- •Изменение надстройки
- •Членство в коллекциях
- •Получение доступа к VBA-процедурам надстройки
- •События объекта AddIn
- •Оптимизация производительности надстроек
- •Проблемы, связанные с использованием надстроек
- •Правильная установка
- •Ссылки на другие файлы
- •Указание правильной версии Excel
- •Глава 22. Работа с лентой
- •Начальные сведения о ленте
- •Активизация вкладки
- •Настройка ленты
- •Простой пример кода RibbonX
- •Некоторые замечания о настройке ленты
- •Код панели инструментов
- •Глава 23. Работа с контекстными меню
- •Обзор объекта CommandBar
- •Типы объектов CommandBar
- •Отображение контекстных меню
- •Настройка контекстных меню с помощью VBA
- •Сброс контекстных меню
- •Отключение контекстного меню
- •Отключение элементов контекстного меню
- •Добавление подменю в контекстное меню
- •Автоматическое добавление и удаление меню
- •Создание нового контекстного меню
- •Справка в приложениях Excel
- •Справочная система, созданная с помощью компонентов Excel
- •Использование примечаний к ячейке для предоставления справки
- •Использование средства HTML Help
- •Связывание файлов справочного руководства с приложением
- •Глава 25. Разработка пользовательских приложений
- •Что такое приложение, ориентированное на пользователя
- •Как это работает
- •Концепции разработки приложений
- •Концепция совместимости
- •Проблемы совместимости
- •Избегайте использования новых возможностей
- •Использование 64-разрядной версии Excel
- •Создание интернациональных приложений
- •Многоязычные приложения
- •Идентификация настроек системы
- •Параметры настройки даты и времени
- •Часто выполняемые операции с файлами
- •Управление файлами с помощью функций VBA
- •Использование объекта FileSystemObject
- •Открытие текстового файла
- •Чтение текстового файла
- •Запись в текстовый файл
- •Получение номера файла
- •Определение или установка позиции в файле
- •Примеры управления текстовыми файлами
- •Импортирование данных из текстового файла
- •Экспортирование диапазона в текстовый файл
- •Импортирование текстового файла в диапазон
- •Протоколирование операций в Excel
- •Фильтрация текстового файла
- •Экспортирование диапазона в формат HTML
- •Введение в IDE
- •Объектная модель IDE
- •Использование VBA для создания кода VBA
- •Простой пример
- •Глава 29. Модули классов
- •Определение модуля класса
- •Пример создания модуля класса
- •Дополнительные сведения о модулях классов
- •События модуля класса
- •Модуль класса CSVFileClass
- •Глава 30. Работа с цветом
- •Определение цвета
- •Цветовая модель RGB
- •Темы документа
- •Изменение цветов диаграммы
- •Списки часто задаваемых вопросов
- •Общие вопросы об Excel
- •Редактор Visual Basic
- •Процедуры
- •Функции
- •Объекты, свойства, методы и события
- •Пользовательские диалоговые окна
- •Надстройки
- •Пользовательский интерфейс
- •Справочная система Excel
- •Техническая поддержка со стороны компании Microsoft
- •Группы новостей
- •Веб-сайты
- •Сайт Йона Пелтиера
- •Системные требования
- •Использование компакт-диска
- •Файлы и программы, находящиеся на компакт-диске
- •Решение проблем
- •Предметный указатель
Глава 22. Работа с лентой |
695 |
•Вид (View): " %w{ F6 } M;
•Разработчик (Developer): " %1 {F6}";
•Надстройки (Add-Ins): " %х{ F6} " .
Настройка ленты
С помощью VBA невозможно изменять ленту произвольным образом. Для этого
нужно написать код RibbonX и включить его в файл рабочей книги. Данный код создает ся в XML-редакторе. Затем можно создать процедуру обратного вызова VBA. Она пред ставляет собой макрос VBA, который вызывается после активизации настраиваемого элемента управления ленты.
RibbonX — это, по сути, XML-код, описывающий элементы управления, которые отображаются на ленте. Данный код определяет их внешний вид, а также действия, про исходящие при активизации этих элементов управления. Подробное рассмотрение кода RibbonX выходит за рамки книги. В следующих разделах рассматривается несколько простых примеров, которые иллюстрируют то, что происходит при модификации поль зовательского интерфейса Excel.
Перекрестная ссылка
Дополнительные сведения о структуре файла Excel можно найти в главе 4.
ОВ данном разделе описан порядок просмотра данных файла рабочей книги X LS X .
Простой пример кода RibbonX
В этом разделе приводится пошаговая инструкция по изменению ленты Excel. В дан ном примере создается новая группа команд ленты (под названием Custom (Пользова
тельская)), которая находится на вкладке Данные (Data). В новой группе ленты также создаются две новые кнопки под названием Hello World (Здравствуй мир) и Goodbye
World (Прощай мир). Щелчок на каждой из этих кнопок вызывает соответствующий макрос VBA.
Примечание
Приведенные ниже инструкции весьма трудоемкие, а их реализация на прак тике чревата появлением ошибок. Поэтому большинство разработчиков не используют данный метод на практике.
Сохранение изменений интерфейса пользователя
Пользователи Excel 2010 могут вносить изменения в ленту и панель быстрого досту па. В частности, не составляет особого труда добавление команд на панель быстрого доступа либо ленту. Каким же образом Excel отслеживает подобные изменения?
Сведения об изменениях, внесенных в панель быстрого доступа, хранятся в файле Excel .o f fic e u i. Местоположение этого файла различно. Например, в моей системе он находится в такой папке:
С:\Users\<HMir_noj7b30BaTej7.ff>\AppData\Local\Microsof t\Of fice
Дополнительные сведения о файле E x c e l. o f f ic e u i можно найти в главе 4.
696 |
Часть VI. Разработка приложений |
Использование метода SendKeys далеко не всегда дает хороший результат. Напри мер, если вызвать на выполнение предыдущий пример во время отображения пользова тельской формы, коды нажатых клавиш будут пересланы форме UserForm, а не ленте.
Просмотр ошибок
Прежде чем выполнять любые настройки ленты, следует включить отображение ошибок, возникающих при использовании метода RibbonX. Выполните команду Файл1^ Параметры Excel (File^Excel Options) для открытия диалогового окна Параметры Excel, затем выберите вкладку Дополнительно (Advanced) и перейдите в раздел Дополнитель но (General). Здесь установите флажок Показывать ошибки интерфейса пользователя надстроек (Show Add-in User Interface Errors).
После выбора этой настройки будут отображаться ошибки RibbonX (в случае их на личия) при открытии рабочей книги — очень полезная возможность на этапе отладки.
Для создания рабочей книги, содержащей код RibbonX, который изменяет ленту, вы полните следующие действия.
1.Создайте новую рабочую книгу Excel, вставьте модуль VBA и введите код двух
процедур обратного вызова.
Ниже приводится код двух процедур, которые вызываются после щелчка мышью на кнопках.
|
Sub |
H e llo W o rld (c o n tro l |
As IR ib b o n C o n tro l) |
|
|
MsgBox "Здравствуй |
мир" |
|
End |
Sub |
|
|
Sub |
G o o d b ye W o rId (co n tro l As IR ib b o n C o n tro l) |
|
|
|
ThisW orkbook. C lose |
|
|
End |
Sub |
|
2. |
Сохраните рабочую книгу, присвоив ей имя rib b on m o d if ic a t io n . xlsm . |
||
3. |
Закройте рабочую книгу. |
|
|
4. |
Активизируйте папку, которая содержит файл rib b o n m o d ific a tio n .x ls m , |
||
и создайте папку custom UI.
5.Находясь в этой папке, воспользуйтесь текстовым редактором (например, Windows Notepad) для создания текстового файла customUI .xml, который содержит сле дующий XML-код RibbonX.
<customUI |
xm ln s= "h t t p : //s c h e m a s .m ic ro s o ft. c o m /o ffic e /2 0 0 6 /0 1 / _ |
||
cu s to m u i"> |
|
|
|
< ribb on > |
|
|
|
<tabs> |
|
|
|
<tab idM so="TabD ata"> |
|
|
|
<group |
id = "G ro u p l" |
la b e l= " C ustom "> |
|
< b u tto n id = " B u tto n l" |
|
||
|
la b e l= " Здравствуй мир" |
|
|
|
s iz e = "n o rm a l" |
|
|
|
o n A c tio n = "H e llo W o rld " |
|
|
|
imageMso="HappyFace" /> |
** |
|
< b u tto n id = "B u tto n 2 " |
|||
|
la b e l="Прощай |
мир" |
|
|
s iz e = " n o rm a l" |
|
|
|
onAction="G oodbyeW orId" |
/> |
|
|
im a g e M s o = "D e c lin e ln v ita tio n " |
||
698 |
Часть VI. Разработка приложений |
"/c u s to m U I/c u s to m U l.x m l" Id = "12345" />
13.Сохраните файл с расширением . r e ls , затем перетащите его обратно в область ZIP-файла, заменив прежнюю версию этого файла.
14.Удалите расширение .z ip . После этого возвращается прежнее название файла: rib b o n m o d ific a tio n .x ls m .
Откройте рабочую книгу в Excel. Если все было сделано правильно, вы увидите но вую группу с двумя новыми кнопками (Hello World и Goodbye World), находящуюся на вкладке Данные (Data), как показано на рис. 22.5.
Ф |
Группировать'r |
‘• j |
ф Hello World |
Ф |
Разгруппировать |
" j |
X Goodbye World |
f*p§ Промежуточный итог |
i |
|
|
________ Структура____________ faj____ Custom____________________
Рис. 22.5. С помощью кода RibbonX была соз дана новая группа, содержащая две кнопки
Компакт-диск
Рассматриваемая в этом примере рабочая книга находится на прилагаемом компакт-диске в файле rib b o n m o d ific a tio n , xlsm .
Обратите внимание, что новая группа на вкладке ленты появляется только в том слу чае, когда код RibbonX находится в активной рабочей книге. Именно в этом заключается основное отличие от изменений пользовательского интерфейса, выполненных в преды дущих версиях Excel.
Совет
Для отображения измененной ленты при любой активной рабочей книге преобразуйте последнюю в надстройку либо добавьте код RibbonX в персо нальную книгу макросов.
Если вы обнаружите, что в результате предпринятых усилий желаемого изменения ленты не произошло, не отчаивайтесь. Существует инструментарий, который позволит облегчить этот нелегкий процесс.
Усоверш енствование простого примера кода RibbonX
В этом разделе приводится пошаговая инструкция по внесению изменений в ленту, которые аналогичны изменениям, описанным в предыдущем разделе. В данном случае использовалось приложение Custom UI Editor для Microsoft Office. Эта программа позво ляет не только создавать код RibbonX, но и проверять ранее созданный код. Она также устраняет необходимость в выполнении сложных манипуляций с файлами. Наконец, эта программа в состоянии генерировать объявления процедур обратного вызова VBA, ко торые можно скопировать и вставить в модуль VBA.
Загрузите свободно распространяемую программу Custom UI Editor для Microsoft Office по такому адресу:
h t t p : //o p e n x m ld e v e lo p e r. o r g /a r tic le s / c u s to m u ie d ito r . aspx
Для добавления на ленту новой группы и кнопок с помощью Custom UI Editor (как описано в предыдущем разделе) выполните следующие действия.
Глава 22. Работа с лентой |
701 |
Процедуры обратного вы зова V B A
Как вы помните, рабочая книга включает две процедуры VBA: H elloW orld и Good byeWorld. Имейа этих процедур соответствуют параметрам onA ction в коде RibbonX. Именно с помощью параметра onA ction код RibbonX может быть связан с кодом VBA.
Обе процедуры VBA содержат аргумент c o n t r o l , который представляет собой объ ект I R ib b o n C o n t r o l. Этот объект включает три свойства, доступ к которым обеспе чивается с помощью кода VBA.
•C o n t e x t . Дескриптор активного окна, содержащий ленту, которая была активи
зирована с помощью обратного вызова. Например, воспользуйтесь следующим выражением для получения имени рабочей книги, которая включает код RibbonX:
c o n t r o l . C o n te x t. C a p tio n
•I d . Включает имя элемента управления, указанного с помощью его параметра Id.
•T a g . Содержит произвольный лист, который связан с элементом управления. Процедуры обратного вызова VBA могут иметь произвольную степень сложности.
Файл . r e l s
После вставки файла, содержащего код RibbonX, эффект достигается после установки связи между файлами документа и настроек. Эти связи создаются с помощью XML-кода и хранятся в файле с расширением . r e l s , который находится в папке _ r e ls . Ниже представлена связь для примера, представленного в предыдущем разделе.
R e la tio n s h ip |
Type="h t t p : / /s c h e m a s .m ic ro s o ft. c o m /o ffic e /2 0 0 6 / |
|
r e la t io n s h ip s / u i/ e x t e n s ib ilit y " |
T a rg e t= " /c u s to m U I/c u s to m U I. x m l" |
|
Id = "12345" |
/> |
|
Параметр T a r g e t указывает на |
файл c u s to m U I. x m l, который содержит код |
|
RibbonX. Значение параметра I d — любая строка, выбранная случайным образом. Та ким образом, эта строка может содержать любую информацию, а ее длина выбирается из соображений уникальности файла (т.е. длина должна быть настолько большой, чтобы не нашелся другой тег использующий тот же параметр
Код RibbonX
А теперь рассмотрим более сложный вопрос — создание XML-кода, который выполня ет изменение пользовательского интерфейса. Как отмечалось ранее, в этой книге не рас сматриваются методы написания кода RibbonX. Все ограничивается несколькими приме рами, и для получения другой информации следует обращаться к другим источникам.
Использование изображ ений im ageM so
ВMicrosoft Office 2010 поддерживается более 1000 именованных изображений, ко торые связаны с различными командами. Если вы знаете имя изображения, можете связать это изображение с пользовательскими элементами управления ленты.
На следующем рисунке показана рабочая книга, которая содержит имена всех изо бражений imageMso. При просмотре имен изображений можно видеть одновременно до 50 изображений (маленького либо среднего размеров), начиная с имени изображе ния, находящегося в активной ячейке. Эта рабочая книга под именем mso image brow ser. xlsm находится на прилагаемом к книге компакт-диске.
iaea 22. Работа с лентой |
703 |
ет новую группу на вкладке Разметка страницы (Page Layout), а также добавляет гажок, который включает отображение разрывов.
П ри м еч ан и е
Несмотря на то что в Excel находится более 1700 команд, отсутствует ко манда, предназначенная для отображения разрывов страниц. Помимо печа ти и предварительного просмотра страниц, единственный способ скрыть разрывы страниц— использование диалогового окна Параметры Excel (Excel Options). Поэтому этот пример имеет также праетическую ценность.
Этот пример довольно сложен, поскольку он требует, чтобы новый элемент управле- 1я лентой был синхронизирован с активным листом. Например, если был активизиро- 1Н рабочий лист, который не отображает разрывы страниц, флажок должен быть уста- )вленным. Более того, разрывы страниц не могут отображаться на листе диаграммы, )этому флажок должен быть сброшен, если активизируется лист диаграммы.
од RibbonX
Следующий код RibbonX добавляет новую группу (с флажком) на вкладку Разметка границы (Page Layout).
:ustomUI
xm ln s= "h t t p : //s c h e m a s .m ic r o s o ft. c o m /o ffic e /2 0 0 6 /0 1 /c u s to m u i" onLoad=" I n i t i a l i z e " >
ribbon > tabs>
tab idM so= "T abP ageLayoutE xcel">
<group id = "G ro u p l" |
la b e l= "C u s to m "> |
ccheckBox id = "C h e c k b o x l" |
|
la b e l= "P a g e |
B reaks" |
o n A ctio n = "T o g g le P a g e B re a kD isp la y" g etP re ssed = "G etP resse d"
g e tE n a b le d = "G e tE n a b le d "/ > </g ro u p >
/tab>
/tabs>
/ribbon>
/custom U I>
Этот код RibbonX ссылается на четыре процедуры обратного вызова VBA, каждая из оторых описана ниже:
• |
I n i t i a l i z e — вызывается при открытии рабочей книги; |
• |
T o g g le P a g e B r e a k D is p la y — вызывается после щелчка мышью на флажке; |
• |
G e tP r e s s e d — вызывается при деактивизации элемента управления (нажи |
|
мается клавиша); |
•G e tE n a b le d — вызывается при деак
тивизации элемента управления (активи зируется другой лист).
На рис. 22.8 показан новый элемент управения
4 |
Переместить вперед |
|=> Выровнять '■ |
О |
Page Breaks |
L4 |
Переместить н а з а |
д Г р у п п и р о в а т ь ' |
|
|
& |
Область выделения |
Повернуть |
|
|
_______________Упорядочить_______________ | |
|
Custom |
||
Рис. 22.8. Этот флажок определяет отображение разрывов страниц на активном листе
704 Часть VI. Разработка приложений
К о д У В А
Тег <C ustom U I> включает параметр onLoad, который определяет процедуру об ратного вызова VBA, код которой приводится ниже.
P u b lic MyRibbon As |
IR ibbonU I |
|
Sub |
I n itia liz e ( R ib b o n As IR ibb on U I) |
|
1 |
Вызывается при |
з а гр у з к е рабочей кн и ги |
|
Set MyRibbon = Ribbon |
|
End |
Sub |
|
Процедура I n i t i a |
l i z e создает объект IR ib b o n U I, который называется M yR ib |
|
bon. Обратите внимание на то, что M yR ib bo n — это глобальная переменная, поэтому доступ к ней возможен со стороны других процедур в этом модуле.
Затем была создана простая процедура обработки событий, которая вызывается в случае активизации рабочего листа. Эта процедура, находящаяся в модуле кода T h is W o rkbo ok (ЭтаКнига), вызывает процедуру C h e c k P a g e B re a k D is p la y .
P riv a te |
Sub W o rkb o o k _ S h e e tA ctiva te (B yV a l Sh As O b je c t) |
C a ll |
C heckPageBreakD isplay |
End Sub |
|
Процедура C h e c k P a g e B re a k D is p la y отменяет установку флажка. Другими сло вами, она разрушает все данные, связанные с этим элементом управления.
Sub |
C heckP ageB reakD isplay() |
|
' |
Вызывается при а кти ви за ц и и |
л иста |
|
M y R ib b o n .In v a lid a te C o n tro l |
( "C h e c k b o x l") |
End |
Sub |
|
После отмены установки флажка вызываются процедуры G e tP re s s e d |
и GetEn- |
||||||
a b le d . |
|
|
|
|
|
|
|
Sub |
G e tP re s s e d (c o n tro l As |
IR ib b o n C o n tro l, |
ByRef re tu rn e d V a l) |
|
|||
' |
Вызывается |
после |
д е активизац и и элемента |
управления |
|
||
|
On E rro r Resume |
N ext |
|
|
|
|
|
|
re tu rn e d V a l |
= A c tiv e s h e e t. D isplayP ageB reaks |
|
||||
End |
Sub |
|
|
|
|
|
|
Sub |
G e tE n a b le d (c o n tro l As |
IR ib b o n C o n tro l, |
ByRef re tu rn e d V a l) |
|
|||
' |
Вызывается |
после |
отмены |
у с та н о в ки флажка |
|
||
|
re tu rn e d V a l |
= T ypeN am e(A ctivesheet) |
= "W orksheet" |
|
|||
End |
Sub |
|
|
|
|
|
|
Обратите внимание |
на то, |
что аргумент |
r e tu r n e d V a l передается |
по ссылке |
|||
(B yR ef). Это означает, что код может изменять значение— именно это и происходит в данном случае. При выполнении процедуры G e tP re s s e d переменной re tu rn e d V a l присваивается значение, соответствующее состоянию свойства D is p la y P a g e B re a k s активного листа. В результате параметру P re s s e d элемента управления присваивается значение T ru e (если отображаются разрывы страниц). При этом флажок установлен. Если же значение этого параметра F a ls e , флажок не устанавливается.
В процедуре G e tE n a b le d переменной r e tu r n e d V a l присваивается значение T ru e , если в качестве активного листа выбран рабочий лист (не лист диаграммы). Таким образом, элемент управления активизируется только в том случае, когда в качестве актив ного листа выбран рабочий лист. **
В качестве вспомогательной процедуры VBA выбрана процедура o n A c tio n под на званием T o g g le P a g e B re a k D is p la y , которая выполняется в том случае, когда поль зователь устанавливает или снимает флажок.
706 Часть VI. Разработка приложений
Совет
Для создания “минимального” пользовательского интерфейса используется
атрибут s ta rtF ro m S c ra tc h |
тега <ribb on > . Если значение этого атрибута |
|
равно True, скрываются все встроенные вкладки. |
||
c rib b o n s ta rtF ro m S c ra tc h = "tru e " > |
||
С о зд а н и е группы ленты |
|
|
Код из примера rib b o n c o n tr o ls |
demo .xlsm создает четыре группы на вкладке |
|
My Stuff. Ниже представлен код, создающий эти четыре группы. |
||
<group id = "G ro u p l" |
la b e l= "M y S t u f f "> |
|
</g ro u p > |
la b e l= "M o re S t u f f "> |
|
<group id= "G rou p2 " |
||
< /g ro u p > |
la b e l= " B u ilt |
In S t u f f "> |
<group id= "G rou p3 " |
||
< /g ro u p > |
la b e l= " G a lle r ie s "> |
|
<group id= "G rou p4 " |
||
< /g ro u p > |
|
|
Эти пары тегов (<g ro u p >, </g ro u p >) находятся между тегами <tab> и </tab>, которые создают новую вкладку.
С о зд а н и е эл ем ен то в управления
Ниже представлен код RibbonX, который создает элементы управления в первой группе (Stuff), показанной на рис. 22.10. Обратите внимание на то, что элементы управ ления определены в первом наборе тегов <group >.
<group id = "G ro u p l" la b e l= "M y |
S t u f f "> |
/> |
|
c la b e lC o n tro l |
id = " L a b e ll" |
g e tL a b e l= "g e tL a b e ll" |
|
c la b e lC o n tro l |
id = "L a b e l2 " |
g e tL a b e l= "g e tL a b e l2 " |
/> |
<e d itB o x id = " E d itB o x l" showLabe1= " t ru e "
la b e l= "Number:"
onChange=" E d itB o xl_ C h a n g e " / >
<b u tto n id = " B u tto n l"
la b e l= "C a lc u la to r" s iz e = "la rg e "
o n A c tio n = "S h o w C a lc u la to r" im a g e M so = "C a lcu la to r" />
< /g ro u p >
Для каждого из двух элементов управления L a b e l |
(подпись) используется связанная |
||||
с ним процедура обратного вызова VBA ( g e tL a b e ll |
и g e tL a b e l2 ). Ниже представ |
||||
лен код этих процедур. |
|
|
|
|
|
Sub |
g e tL a b e ll( c o n tr o l As |
IR ib b o n C o n tro l, |
ByRef re tu rn e d V a l) |
||
End |
re tu rn e d V a l = "H e llo |
" |
& A p p lic a tio n .UserName |
||
Sub |
IR ib b o n C o n tro l, |
ByRef re tu rn e d V a l) |
|||
Sub |
g e tL a b e l2 (c o n tro l As |
||||
End |
re tu rn e d V a l = "Today |
is |
" & Date |
|
|
Sub |
|
|
|
|
|
Непосредственно после загрузки кода RibbonX вызываются на выполнение эти две процедуры, а заголовки элементов управления L a b e l динамически обновляются значе ниями имени пользователя и даты.
Элемент управления e d i t Box включает процедуру обратного вызова onChange под названием E ditB oxl_C hange, которая вычисляет квадратный корень от введенного
708 |
Часть VI. Разработка приложений |
<ite m id = "M o n th ll" lab e l= "N o ve m b e r"/>
<ite m id = "M o n th l2 " lab e l= "D e ce m b e r" /> </comboBox>
</g ro u p >
Эта группа включает следующие элементы управления: to g g le B u tto n , раздели тель, checkB ox и comboBox. Эти элементы управления просты в применении и не тре буют дополнительных объяснений. За исключением разделителя (вставляет вертикаль ную линию), для каждого элемента управления существует связанная с ним процедура обратного вызова, которая просто отображает состояние этого элемента.
Sub |
T o g g le B u tto n l_ C lic k (c o n tro l As IR ib b o n C o n tro l, |
_ |
|||
|
ByRef re tu rn e d V a l) |
& |
re tu rn e d V a l |
|
|
End |
MsgBox |
"T o gg le v a lu e : " |
|
||
Sub |
|
|
As IR ib b o n C o n tro l, _ |
|
|
Sub |
C h e ckb o xl_ C h a n g e (co n tro l |
|
|||
|
p re ssed |
As Boolean) |
" |
& p re ssed |
|
End |
MsgBox |
"Checkbox v a lu e : |
|
||
Sub |
|
As |
IR ib b o n C o n tro l, te x t |
As S trin g ) |
|
Sub |
C om bol_C hange(control |
||||
End |
MsgBox |
te x t |
|
|
|
Sub |
|
|
|
|
|
• ч П рим ечание
Элемент управления comboBox также принимает текст, введенный пользова телем. Если нужно ограничить количество вариантов выбора, предлагаемых этим элементом, воспользуйтесь элементом управления dropDown.
Элементы управления в третьей группе являются встроенными (рис. 22.12). Для включения встроенного элемента управления в пользовательскую группу следует знать его имя (значение параметра idM so).
Ниже представлен код RibbonX третьей группы ленты.
<group id= "G rou p3 " |
la b e l= " B u ilt In S t u f f "> |
|||
c c o n tr o l |
idM so="Copy" |
la b e l= "C o p y " /> |
||
< c o n tro l |
idM so= "P aste" |
la b e l= "P a s te " e n a b le d = "tru e " /> |
||
c c o n tro l idM so="W indowSwitchW indowsMenuExcel" |
||||
la b e l= "S w itc h |
Window" |
/> |
||
c c o n tro l |
id M s o = " Ita lic " |
/> |
||
c c o n tro l |
idM so= "B o ld" |
/> |
|
|
c c o n tro l |
idM so= "F ile O p en " /> |
|||
с / g ro u p > |
|
|
|
|
Для этих элементов управления отсутствуют процедуры обратного вызова, поскольку данные элементы выполняют стандартные действия.
На рис. 22.13 показана последняя группа элементов управления, которая состоит из двух коллекций.
^ Сору |
К |
Щ Pick a Month: |
|
I f t Paste |
Ж |
Banjo |
|
§? Switch Window ~ |
Открыть |
||
Players ^ |
|||
Buitt In Stuff |
Galleries |
||
Рис. 22.12. В этой группе находятся |
Рис. 22.13. Эта группа включает две |
встроенные элементы управления |
коллекции |
лава 22. Работа с лентой |
709 |
Ниже приводится код RibbonX, определяющий эти коллекции.
group id= "G rou p4 " la b e l= " G a lle r ie s "> < g a lle r y id = " G a lle r y l"
im ageM so="V iew A ppointm entInC alendar"
la b e l= " P ic k |
a |
M o n th :" |
||
colum ns="2 " |
ro w s= "6 " |
|||
o n A ctio n = "M o n th S e le cte d " > |
||||
c ite m |
id = "J a n u a ry " |
la b e l= "J a n u a ry " _ |
||
imageMso="Q ueryS electQ ueryT ype" / > |
||||
< ite m |
id = "F e b ru a ry " |
la b e l= "F e b ru a ry " _ |
||
im ageM so="Q uerySelectQ ueryType" / > |
||||
c ite m |
id = "M a rch " |
la b e l= "M a rc h " _ |
||
imageMso=" Q ueryS electQ ueryT ype" / >
<ite m id = " A p r il" la b e l= " A p r il" _ imageMso=" Q ueryS electQ ueryT ype" / >
<ite m id="M ay" la b e l= "M a y" _ imageMso=" Q ueryS electQ ueryT ype" / >
c ite m |
id = "J u n e " |
la b e l="June" _ |
|
|
|||
imageMso=" Q ueryS electQ ueryT ype" / > |
|
||||||
c ite m |
id = " J u ly " |
la b e l= " J u ly " _ |
|
|
|||
imageMso=" Q ueryS electQ ueryT ype" / > |
|
||||||
c ite m |
id = "A u g u s t" la b e l= "A u g u s t" _ |
|
|
||||
imageMso="Q ueryS electQ ueryT ype" / > |
|
||||||
c ite m |
id= "S e ptem be r" |
la b e l= "S e p te m b e r" _ |
|||||
imageMso=" Q ueryS electQ ueryT ype" / > |
|
||||||
c ite m |
id = "O c to b e r" |
la b e l= "O c to b e r" |
_ |
|
|||
imageMso=" Q ueryS electQ ueryT ype" / > |
_ |
||||||
c ite m |
id="N ovem ber" |
la b e l= "N o ve m b e r" |
|||||
imageMso="Q ueryS electQ ueryT ype" / > |
_ |
||||||
c ite m |
id="D ecem ber" |
lab e l= "D e ce m b e r" |
|||||
imageMso=" Q ueryS electQ ueryT ype" / > |
|
||||||
c b u tto n id = "T o d a y" |
|
|
|
||||
|
la b e l= "T o d a y . . . " |
|
|
||||
|
im ageM so="V iew A ppointm entInC alendar" |
||||||
|
onAct io n = " ShowToday" / > |
|
|
||||
c /g a lle r y > |
|
|
|
|
|
||
c g a lle r y |
id = " G a lle ry 2 " |
|
|
||||
|
la b e l= "B a n jo |
P la y e rs " |
|
|
|||
|
s iz e = "la rg e " |
|
|
|
|
||
|
colu m n s= "4 " |
|
|
|
|
||
|
ite m W id th = "100" |
ite m H e ig h t= "125" |
|||||
|
imageMso= |
"Camera" |
|
|
|||
|
o n A c tio n = "O n A c tio n "> |
|
|
||||
|
c ite m |
id = "b p 0 1 " |
im age="bp0 1 " |
/> |
|
||
|
c ite m id = "b p 02 " |
im age="bp02 " |
/> |
|
|||
|
c ite m id = "b p 0 3 " |
im age="bp03" |
/> |
|
|||
|
c ite m id = "b p 0 4 " |
im age="bp04" |
/> |
|
|||
|
c ite m id = "b p 0 5 " |
im age="bp05" |
/> |
|
|||
|
c ite m id = "b p 0 6 " |
im age="bp06" |
/> |
|
|||
|
c ite m id = "b p 0 7 " |
im age="bp07" |
/> |
|
|||
|
c ite m id = "b p 0 8 " |
im age="bp08" |
/> |
|
|||
|
c ite m id = "b p 0 9 " |
im age="bp09" |
/> |
|
|||
|
c ite m |
id = " b p l0 " |
im a g e = "b p l0" |
/> |
|
||
|
c ite m |
id = " b p ll" |
im a g e = "b p ll" |
/> |
|
||
|
c ite m |
id = " b p l2 " |
im a g e = "b p l2 " |
/> |
|
||
|
c ite m |
id = "b p l3 " |
im a ge = "bp l3" |
/> |
|
||
|
c ite m |
id = "b p l4 " |
im a g e = "b p l4 " |
/> |
|
||
