- •Об авторе
- •Введение
- •Глава 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. Работа с лентой |
713 |
Ниже приводится код процедуры d yn a m icM e n u C o n te n t. Эта процедура выполняет циклический просмотр ячеек в столбце А активного листа, считывает XML-код, а также со храняет его в переменной XMLcode. Как только XML-код будет добавлен в полном объе ме, он передается аргументу r e tu r n e d V a l. В результате элемент управления D yn a m ic Menu получает новый код, в результате чего отображается другой набор параметров меню.
Sub d yn a m icM e n u C o n te n t(co n tro l As IR ib b o n C o n tro l, _
ByRef |
re tu rn e d V a l) |
Dim |
r As Long |
Dim |
XMLcode As S trin g |
'Считывание XML-кода с активного листа
For г = 1 |
То |
A p p lic a tio n .C o u n tA (R a n g e ( "A :A ")) |
XMLcode |
= |
XMLcode & A c tiv e S h e e t. C e lls ( r , 1) & 11 " |
N ext r |
|
|
re tu rn e d V a l |
= XMLcode |
|
End Sub
К о м п а к т-д и ск
Рабочая книга, содержащая этот пример, находится на прилагаемом ком- пакт-диске в файле dynamicmenu.xlsm .
Некоторые замечания о настройке ленты
А теперь еще несколько замечаний, которые сослужат вам службу в процессе иссле дования чудесного мира настройки ленты Excel.
•При работе с лентой убедитесь в том, что включен режим отображения ошибок. До полнительные сведения об этом режиме можно найти во врезке “Просмотр ошибок”.
•Помните о том, что код RibbonX чувствителен к изменению регистра символов.
•При именовании идентификаторов элементов управления применяется английский язык, причем они сохраняют свои названия во всех версиях Excel. Поэтому изме ненная лента будет работоспособной независимо от языка, используемого в вашей версии Excel.
•Результат изменения ленты отображается только в том случае, когда содержащая код RibbonX рабочая книга будет активной. Если нужно, чтобы изменения ленты отображались для каждой рабочей книги, код RibbonX следует оформить в виде надстройки.
•Встроенные элементы управления автоматически масштабируются при изменении размеров окна Excel. Пользовательские элементы управления всегда имеют одни и те же размеры, т.е. не масштабируются.
•Добавление или удаление элементов управления из встроенной группы ленты не возможно.
•Пользователь может скрывать вкладки. Для этого используется следующий код RibbonX (скрываются три вкладки).
ccustom UI |
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 / |
c u s to m u i"> |
|
< ribbon> |
|
<tabs> |
idM so="TabP ageLayoutE xcel" v is ib le = " fa ls e " /> |
< tab |
|
<tab |
idM so="TabD ata" v is ib le = " f a ls e " /> |
<tab |
idM so="TabReview" v is ib le = " fa ls e " /> |
714 |
Часть VI. Разработка приложений |
</ta b s >
</rib b o n > </c u s to m U I>
•Можно также скрыть группы в составе вкладки. Ниже представлен код RibbonX, который скрывает четыре группы на вкладке Вставка (Insert), — остается лишь группа Диаграммы (Charts).
ccustom UI 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 /
c u s to m u i"> |
|
|
|
< rib b o n > |
|
|
|
<tabs> |
|
|
|
<tab id M s o = "T a b In s e rt"> |
|
|
|
<group |
id M so = "G ro u p In s e rtT a b le s E x c e l" v is ib le = " f a ls e " /> |
||
<group |
id M s o = " G ro u p In s e rtIllu s tra tio n s " v is ib le = " f a ls e " /> |
||
<group |
id M s o = "G ro u p In s e rtL in k s " |
v is ib le = " f a ls e " |
/> |
<group |
id M s o = "G ro u p In s e rtT e x t" |
v is ib le = " fa ls e " |
/> |
</ta b >
</ta b s>
</rib b o n > </cu sto m U I>
•Встроенному элементу управления можно назначить пользовательский макрос. Подобная операция называется изменением назначения элемента управления. Ни же представлен код 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 /
c u s to m u i"> |
|
|
<commands> |
id M so = "F ile S a ve " |
onA ctio n = "m yS a ve"/> |
ccommand |
||
<command |
id M s o = " F ile P rin t" |
o n A c tio n = "m y P rin t"/> |
<command |
id M s o = "F ile P rin tQ u ic k " o n A c tio n = "m y P rin t" /> |
|
< /commands> |
|
|
</cu sto m U I> |
|
|
•Можно также создать код RibbonX, который отключает один или несколько встроенных элементов управления. Приведенный ниже пример кода отключает команду Вставить клип (Insert ClipArt).
<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 / c u s to m u i">
<commands>
ccommand id M s o = " C lip A r tIn s e rt" e n a b le d = "fa ls e "/> < /commands>
</cu sto m U I>
•Если в вашем распоряжении две или более рабочих книг (или надстроек), которые добавляют элементы управления в одну и ту же группу ленты, следует гарантиро вать использование ими одного и того же пространства имен. Для этого проверьте тег <CustomUI>, который находится в верхней части кода RibbonX.
Создание “старомодных” панелей инструментов
Если вы полагаете, что настройка ленты несколько обременительна, можеТе создать простую настраиваемую панель инструментов с помощью объекта CommandBar, ис пользуемого в предыдущих версиях Excel. Эта методика великолепно подходит для тех рабочих книг, с которыми будете работать только вы. Она также обеспечивает быстрый доступ к макросам.
Глава 22. Работа с лентой |
715 |
В этом разделе будет представлен соответствующий пример кода, который вы смо жете легко адаптировать в соответствии со своими потребностями. Я не буду обременять вас излишними подробностями. Дополнительные сведения, касающиеся объекта Com mandBar, вы сможете найти в Интернете или в предыдущих изданиях этой книги. Объек ты CommandBar обладают намного большими возможностями, чем представленный вданном разделе пример.
Ограничения, присущ ие “старомодны м” панелям в Excel 2010
Если вы захотите создать панель инструментов для Excel 2010, помните о следующих ограничениях:
•она не может быть “плавающей”;
•она будет отображаться в группе Настраиваемые панели инструментов
(Custom Toolbars) вкладки Надстройки (Add-Ins) наряду с другими панелями ин струментов;
•некоторые из свойств и методов объекта CommandBar просто игнорируются Excel.
Код панели инструментов
При выполнении кода, рассматриваемого в этом разделе, предполагается, что рабочая книга включает два макроса (M a c ro l и М асго2). Также предполагается, что панель ин струментов создается при открытии рабочей книги и удаляется — при ее закрытии.
П р и м еч а н и е
В отличие от результатов изменений ленты, настраиваемые панели отобра жаются независимо оттого, активизирована ли рабочая книга.
В модуле кода T h is W o rk b o o k |
(ЭтаКнига) введите следующую процедуру. Во- |
первых, вызывается процедура, которая создает панель инструментов при открытии ра |
|
бочей книги. Во-вторых, вызывается |
процедура, которая удаляет панель инструментов |
после закрытия рабочей книги.
P rivate |
Sub W orkbook_Open() |
|
C a ll C re a te T o o lb a r |
|
|
End Sub |
Sub W orkbook_B eforeC lose(C ancel As Boolean) |
|
P rivate |
||
C a ll D e le te T o o lb a r |
|
|
End Sub |
|
|
|
П ерекрестная ссы лка |
|
|
В главе 19 описывалась потенциальная проблема, которая связана с собы |
|
|
тием workbook |
Bef oreC lose. После запуска на выполнение обработчика со |
|
бытий workbook |
Bef oreC lose отображается сообщение Excel “ Не хотите ли |
сохранить...” (Do you want to save...). Если щелкнуть на кнопке Отмена (Cancel), рабочая книга остается открытой, но элементы настраиваемого меню будут удалены. В главе 19 также рассматривался способ решения этой проблемы.
Ниже представлен код процедуры C re a te T o o lb a r .
Const TOOLBARNAME As S trin g = "M yToolbar"
Sub C re a te T o o lb a r()
Глава 22. Работа с лентой |
717 |
•Face ID — число, которое определяет отображаемое на кнопке изображение;
•O nA ction — макрос, который выполняется после щелчка на кнопке;
•C a p tio n — экранная подсказка, отображаемая после установки указателя мыши над кнопкой.
С о в е т
©Вместо установки значения свойства FaceiD, установите значение свойства P ic tu re , используя любое из изображений imageMso. Например, следую щий оператор отображает зеленую “ галочку” .
.P ic tu re = A pplication.C om m andBars.G etIm ageM so _ ( " A c c e p tln v ita tio n " , 16, 16)
Для получения дополнительных сведений относительно изображений imageMso обратитесь к врезке “Использование изображений imageMso” .
После закрытия рабочей книги вызывается процедура обработки событий Workbook_Bef o r e C lo se , которая вызывает метод D e le teT o o lb a r .
Sub |
D e le te T o o lb a r() |
||
On |
E r ro r |
Resume N ext |
|
|
CommandBars(TOOLBARNAME).Delete |
||
On |
E rr o r |
GoTo 0 |
|
End |
Sub |
|
|
