Upload
buixuyen
View
245
Download
9
Embed Size (px)
Citation preview
СодержаниеОб авторах 21
Введение 23О чем эта книга 23Что необходимо знать 24Что вам понадобится 24Соглашения, используемые в книге 24
Команды Excel 24Команды VBE 25Клавиатура 25
Пиктограммы, используемые в книге 26Структура книги 27
Часть I. Знакомство с VBA в Excel 27Часть II. Профессиональные методики программирования 27Часть III. Пользовательские формы 27Часть IV. Разработка приложений Excel 27Часть V. Приложения 27
О сайте книги 28О пакете Power Utility Pak 28Ждем ваших отзывов! 28
Часть I. Знакомство с VBA в Excel 29Глава1.Основыразработкиприложенийэлектронныхтаблиц 31
О приложениях электронных таблиц 31Этапы разработки приложения 32Идентификация потребностей пользователя 33Проектирование приложения с учетом потребностей пользователей 35Разработка удобного пользовательского интерфейса 37
Настройка ленты 37Настройка контекстных меню 37Комбинации клавиш 38Создание пользовательских диалоговых окон 38Использование элементов управления ActiveX на рабочем листе 39Фактическая разработка приложения 41
Взаимодействие с конечным пользователем 41Тестирование приложения 41Как сделать приложение отказоустойчивым 42Как создавать привлекательные и интуитивно понятные приложения 45Создание пользовательской справочной системы 46
00_content.indd 6 30.10.2017 22:59:20
Содержание 7
Документирование усилий, затраченных на разработку 46Распространение приложения среди пользователей 46Обновление приложения 47
Другие вопросы разработки приложений 47Версия Excel, установленная у пользователя 48Трудности, касающиеся языковой поддержки 48Быстродействие системы 48Видеорежимы 49
Глава2.ВведениевVisualBasicforApplications 51Знакомство со средством записи макросов 51
Создание первого макроса 52Абсолютная и относительная запись макросов 55Другие вопросы, связанные с записью макросов 59
Знакомство с VBE 64Компоненты VBE 64Работа с окном Project 66Работа с окнами кода 68Настройка среды VBE 71
Основы VBA 75Знакомство с объектами 76Знакомство с коллекциями 76Знакомство со свойствами 77
Объекты Range 80Местоположение свойств объекта Range 81Свойство Range 81Свойство Cells 82Свойство Offset 85
Важные концепции 86Не паникуйте, вы не останетесь в одиночестве 88
Прочтите оставшуюся часть книги 88Используйте средство записи макросов 88Используйте справочную систему 88Используйте браузер объектов 89Ищите код в Интернете 90Обращайтесь на пользовательские форумы 91Посещайте блоги экспертов 91Найдите видеокурсы на YouTube 92Учитесь на сайте Microsoft Office Dev Center 92Воспользуйтесь файлами Excel, доступными в вашей организации 92Задайте вопросы местным знатокам Excel 92
Глава3.ОсновыпрограммированиянаVBA 93Обзор элементов и конструкций VBA 93Комментарии 96
00_content.indd 7 30.10.2017 22:59:23
Содержание8
Переменные, типы данных и константы 97Определение типов данных 98Объявление переменных 100Область действия переменной 102Использование констант 105Работа со строками 106Работа с датами 107
Операторы присваивания 108Массивы 110
Объявление массивов 111Объявление многомерных массивов 111Объявление динамических массивов 112
Объектные переменные 112Пользовательские типы данных 114Встроенные функции 115Управление объектами и коллекциями 118
Конструкция With/End With 118Конструкция For Next 119
Контроль выполнения кода 121Операторы GoTo 121Конструкция If Then 122Конструкция Select Case 125Циклическая обработка инструкций 130
Глава4.РаботаспроцедурамиSub 139О процедурах 139
Объявление процедуры 140Область действия процедуры 141
Выполнение процедуры Sub 142Выполнение процедуры с помощью команды Run Sub/UserForm 143Запуск процедуры из диалогового окна Макрос 143Выполнение процедуры с помощью комбинации клавиш 144Вызов процедуры с помощью ленты 145Вызов процедуры из пользовательского контекстного меню 146Вызов процедуры из другой процедуры 146Выполнение процедуры по щелчку на объекте 150Выполнение процедуры по событию 152Выполнение процедуры в окне отладки 152
Передача аргументов процедурам 153Обработка ошибок 157
Перехват ошибок 157Примеры обработки ошибок 159
Реальный пример 162Цель проекта 162Требования к проекту 162
00_content.indd 8 30.10.2017 22:59:24
Содержание 9
Что необходимо знать 163Применяемый подход 163Предварительная запись действий 164Подготовка 165Написание кода 166Создание процедуры сортировки 167Дополнительное тестирование 171Устранение проблем 172Доступность 176Оценка проекта 177
Глава5.Созданиефункций 179Процедуры и функции 179Назначение пользовательских функций 180Простой пример функции 180
Использование функции на рабочем листе 181Использование функции в процедуре VBA 182Анализ пользовательской функции 183
Синтаксис функции 185Область действия функции 186Выполнение функций 186
Аргументы функций 190Примеры функций 190
Функции без аргументов 190Функция с одним аргументом 192Функция с двумя аргументами 196Функция с аргументом в виде массива 196Функция с необязательными аргументами 197Функция, возвращающая массив VBA 199Функция, возвращающая значение ошибки 202Функция с неопределенным количеством аргументов 203
Имитация функции Excel СУММ() 205Расширенные функции для работы с датами 208Отладка функций 210Работа с диалоговым окном Вставкафункции 211
Использование метода MacroOptions 212Указание категории функции 213Добавление описания функции вручную 215
Использование надстроек для хранения пользовательских функций 216Использование функций Windows API 216
Идентификация папки Windows 218Определение состояния клавиши <Shift> 219Дополнительная информация о функциях Windows API 220
00_content.indd 9 30.10.2017 22:59:24
Содержание10
Глава6.КонцепциясобытийExcel 221Типы событий Excel 221
Последовательность событий 222Размещение процедур обработки событий 223Отключение событий 224Ввод кода для процедуры обработки события 226Процедуры обработки событий, которые используют аргументы 227
События объекта Workbook 228Событие Open 229Событие Activate 230Событие SheetActivate 230Событие NewSheet 231Событие BeforeSave 231Событие Deactivate 232Событие BeforePrint 232Событие BeforeClose 234
События объекта Worksheet 236Событие Change 237Отслеживание изменений в определенном диапазоне 238Событие SelectionChange 242Событие BeforeDoubleClick 243Событие BeforeRightClick 244
События объекта Application 245Активизация событий объекта Application 246Идентификация открытия рабочей книги 247Отслеживание событий объекта Application 248
События, не связанные с объектами 249Событие OnTime 249Событие OnKey 251
Глава7.ПриемыиметодыпрограммированиянаVBA 255Учимся на примерах 255Работа с диапазонами 256
Копирование диапазона 256Перемещение диапазона 257Копирование диапазона переменного размера 258Выделение либо идентификация типов диапазонов 259Изменение размеров диапазона 261Запрос значения ячейки 262Ввод значения в следующую пустую ячейку 264Приостановка работы макроса для определения диапазона пользователем 265Подсчет количества выделенных ячеек 266Идентификация типа выделенного диапазона 267Просмотр выделенного диапазона 269Удаление всех пустых строк 272
00_content.indd 10 30.10.2017 22:59:25
Содержание 11
Дублирование строк 273Идентификация диапазона, находящегося в другом диапазоне 275Идентификация типа данных ячейки 276Чтение и запись диапазонов 277Более быстрый способ записи в диапазон 279Перенос одномерных массивов 281Перенос диапазона в массив Variant 281Выбор ячеек по значению 282Копирование несмежных диапазонов 283
Управление рабочими книгами и листами 285Сохранение всех рабочих книг 285Сохранение и закрытие всех рабочих книг 286Частичное сокрытие элементов рабочего листа 286Создание содержания в виде списка гиперссылок 288Синхронизация рабочих книг 289
Приемы программирования на VBA 290Переключение значения булева свойства 290Отображение даты и времени 290Отображение времени в дружественном формате 292Отображение списка шрифтов 293Сортировка массива 294Обработка последовательности файлов 296
Несколько полезных функций для применения в коде 298Функция FileExists 298Функция FileNameOnly 298Функция PathExists 299Функция RangeNameExists 299Функция SheetExists 300Функция WorkbookIsOpen 300Получение значения из закрытой рабочей книги 300
Полезные функции рабочих листов 303Получение сведений о форматировании ячейки 303Общение с рабочими листами 305Отображение даты сохранения файла или вывода файла на печать 305Выявление иерархии объектов 306Подсчет количества ячеек между двумя значениями 307Идентификация последней непустой ячейки в столбце или в строке 308Соответствие строки шаблону 310Получение n-го элемента строки 311Проговаривание чисел 312Универсальная функция 313Функция SHEETOFFSET 313Возвращение максимального значения среди всех рабочих листов 314Возвращение массива случайных целых чисел без повторов 316
00_content.indd 11 30.10.2017 22:59:25
Содержание12
Распределение значений диапазона в случайном порядке 317Сортировка диапазона 318
Вызов функций Windows API 319Объявления API-функций 320Определение файловых ассоциаций 321Определение параметров принтера 322Определение текущего видеорежима 323Чтение и запись параметров системного реестра 324
Часть II. Профессиональные методики программирования 327Глава8.Работасосводнымитаблицами 329
Вводный пример 329Создание сводной таблицы 330Просмотр кода VBA 332Улучшение кода сводной таблицы 333
Создание сложных сводных таблиц 335Код сводной таблицы 336Принцип работы сводной таблицы 338
Создание нескольких сводных таблиц 339Создание обратной сводной таблицы 342
Глава9.Управлениедиаграммами 345Кратко о диаграммах 346
Расположение диаграмм 346Диаграммы и средство записи макросов 347Объектная модель диаграммы 347
Создание внедренной диаграммы 348Создание диаграммы на отдельном листе 350Изменение диаграмм 350Активизация диаграммы с помощью VBA 352Перемещение диаграммы 353Деактивизация диаграммы 354Идентификация активности диаграммы 354Удаление объектов из коллекции ChartObjects или Charts 355Циклический обход диаграмм 356Изменение размеров и выравнивание диаграмм 359Создание множества диаграмм 360Экспорт диаграммы 362
Экспорт всех изображений 363Изменение применяемых в диаграмме данных 364
Изменение данных диаграммы на основе активной ячейки 366Идентификация используемых в диаграмме диапазонов с помощью VBA 367
Отображение подписей данных на диаграмме 370Отображение диаграммы в пользовательском диалоговом окне 374События диаграмм 376
00_content.indd 12 30.10.2017 22:59:25
Содержание 13
Пример использования событий объекта Chart 377Поддержка событий для внедренных диаграмм 379Пример использования событий объекта Chart во внедренной диаграмме 381
Приемы и трюки, используемые при создании диаграмм 383Печать внедренных диаграмм на всю страницу 383Создание статической диаграммы 384Отображение подсказки с помощью события MouseOver 385Прокрутка диаграммы 388
Спарклайны 390Глава10.Взаимодействиесдругимиприложениями 395
Понятие об автоматизации в Microsoft Office 395Знакомство с концепцией связывания 396Простой пример автоматизации 398
Управление приложением Access из Excel 399Выполнение запроса Access из Excel 399Выполнение макроса Access из Excel 400
Управление приложением Word из Excel 401Передача данных Excel в документ Word 401Имитация почтового слияния с документом Word 402
Доступ к PowerPoint из Excel 404Передача данных Excel в презентацию PowerPoint 405Передача всех диаграмм Excel в презентацию PowerPoint 406Преобразование рабочей книги в презентацию PowerPoint 407
Автоматизация Outlook с помощью Excel 409Отправка активной книги в виде вложения 409Рассылка выбранных диапазонов в виде вложений 410Отправка единственного листа в виде вложения 411Рассылка адресов из списка контактов 412
Запуск другого приложения из Excel 413Использование функции VBA Shell 413Использование API-функции ShellExecute 416Использование инструкции AppActivate 418Запуск диалоговых окон панели управления 418
Глава11.Работасвнешнимиданнымиифайлами 421Подключения к внешним данным 421
Создание подключения вручную 422Изменение подключений к данным вручную 425Создание динамических подключений с помощью VBA 427Обход всех подключений к книге 429
Использование ADO и VBA для получения внешних данных 430Строка подключения 430Объявление набора записей 432Ссылки на объектную библиотеку ADO 433
00_content.indd 13 30.10.2017 22:59:26
Содержание14
Пример кода 434Использование ADO для работы с активной книгой 435
Работа с текстовыми файлами 437Открытие текстового файла 438Чтение текстового файла 439Запись в текстовый файл 439Получение номера файла 439Идентификация или установка позиции в файле 440Инструкции чтения и записи в файл 440
Примеры управления текстовыми файлами 441Импорт данных из текстового файла 441Экспорт диапазона в текстовый файл 441Импорт текстового файла в диапазон 442Журнальная регистрация операций в Excel 444Фильтрация текстового файла 444
Часто выполняемые операции с файлами 445Управление файлами с помощью функций VBA 446Использование объекта FileSystemObject 450
Архивирование и разархивирование файлов 453Архивирование файлов 453Разархивирование файла 455
Часть III. Пользова тельские формы 457Глава12.Созданиесобственныхдиалоговыхокон 459
Подготовка к созданию диалоговых окон 459Использование окон ввода данных 460
Функция InputBox в VBA 460Метод Excel Application.InputBox 462
Функция VBA MsgBox 466Метод Excel GetOpenFilename 470Метод Excel GetSaveAsFilename 474Получение имени папки 474Отображение встроенных диалоговых окон Excel 475Отображение формы ввода данных 477
Доступ к формам ввода данных 478Отображение формы ввода данных с помощью VBA 479
Глава13.Работаспользовательскимиформами 481Пользовательские диалоговые окна в Excel 482Вставка новой формы UserForm 482Добавление элементов управления в пользовательское диалоговое окно 482Элементы управления на панели Toolbox 484
CheckBox 484ComboBox 485CommandButton 485
00_content.indd 14 30.10.2017 22:59:26
Содержание 15
Frame 485Image 485Label 485ListBox 485MultiPage 486OptionButton 486RefEdit 486ScrollBar 486SpinButton 486TabStrip 486TextBox 487ToggleButton 487
Настройка элементов управления пользовательского диалогового окна 488Изменение свойств элементов управления 489
Использование окна Properties 490Общие свойства 493Советы по использованию клавиатуры 494
Отображение формы UserForm 495Настройка позиции отображения формы 496Отображение немодальной формы 497Отображение пользовательского диалогового окна на основе значения переменной 497Загрузка пользовательского диалогового окна 498О процедурах обработки событий 498
Закрытие пользовательского диалогового окна 498Пример создания пользовательского диалогового окна 500
Создание пользовательской формы 500Создание кода для отображения диалогового окна 503Тестирование диалогового окна 503Добавление процедур обработки событий 504Готовое окно 506
О событиях объекта UserForm 506Получение дополнительных сведений о событиях 507Подробное рассмотрение событий объекта UserForm 508События элемента управления SpinButton 508Совместное использование элементов управления SpinButton и TextBox 510
Ссылка на элементы управления пользовательского диалогового окна 513Настройка панели инструментов Toolbox 514
Добавление новых страниц 514Настройка или комбинирование элементов управления 514Добавление элементов управления ActiveX 516
Создание шаблонов диалоговых окон 517Порядок создания диалогового окна 518
00_content.indd 15 30.10.2017 22:59:26
Содержание16
Глава14.Примерыпользовательскихформ 519Создание “меню” с помощью объекта UserForm 519
Использование элементов управления CommandButton 520Использование элемента управления ListBox 520
Выбор диапазона в пользовательской форме 522Создание заставки 524Отключение кнопки закрытия пользовательского диалогового окна 526Изменение размеров формы UserForm 527Масштабирование и прокрутка листа в пользовательском диалоговом окне 529Использование элемента управления ListBox 531
Добавление опций в элемент управления ListBox 532Идентификация выделенного элемента ListBox 537Идентификация нескольких выделенных элементов списка ListBox 538Несколько списков в одном элементе управления ListBox 539Передача опций элемента управления ListBox 540Перемещение опций в списке элементов управления ListBox 542Работа с многоколоночными элементами управления ListBox 544Использование элемента управления ListBox для выделения строк на листе 546Использование элемента управления ListBox для активизации листа 548Фильтрация списка ListBox в поле TextBox 551
Применение элемента управления MultiPage 553Использование внешних элементов управления 554Анимация элемента управления Label 557
Глава15.Дополнительныеприемыработыспользовательскимиформами 561Немодальные диалоговые окна 562Отображение индикатора текущего состояния 566
Создание отдельного индикатора текущего состояния 567Отображение индикатора текущего состояния, интегрированного в окно UserForm 570Создание неграфического индикатора текущего состояния 575
Создание мастеров 577Настройка элемента управления MultiPage 577Добавление кнопок 578Программирование кнопок 579Программирование зависимостей 581Выполнение задачи 582
Имитация функции MsgBox 583Код функции MyMsgBox 584Как это работает 586Использование функции MyMsgBox 588
Окно UserForm с перемещаемыми элементами управления 588Окно UserForm без строки заголовка 589Имитация панели инструментов с помощью окна UserForm 591Имитация области задач с помощью окна UserForm 593
00_content.indd 16 30.10.2017 22:59:27
Содержание 17
Окно UserForm с изменяемыми размерами 595Несколько кнопок с одной процедурой обработки событий 599Диалоговое окно выбора цвета 602Отображение диаграммы в окне UserForm 604
Сохранение диаграммы в виде GIF-файла 605Изменение свойства Picture элемента управления Image 605
Создание полупрозрачного окна UserForm 606Игра в “пятнашки” 608Играем в видеопокер в окне UserForm 609
Часть IV. Разработка приложений Excel 611Глава16.Созданиеииспользованиенадстроек 613
Знакомство с надстройками 613Надстройки и стандартные рабочие книги 614Зачем нужны надстройки 615
Использование диспетчера надстроек Excel 617Создание надстройки 618Пример разработки надстройки 619
Добавление описания в надстройку 621Создание примера надстройки 621Установка надстройки 622Тестирование надстройки 623Распространение надстройки 624Изменение надстройки 624
Файлы XLSM и XLAM 625Членство в коллекциях 625Отображение окон файлов XLSM и XLAM 626Рабочие листы и листы диаграмм в файлах XLSM и XLAM 626Получение доступа к VBA-процедурам надстройки 627
Управление надстройками с помощью кода VBA 631Добавление элемента в коллекцию AddIns 631Удаление элемента из коллекции AddIns 632Свойства объекта AddIn 632Получение доступа к надстройке как к рабочей книге 635События объекта AddIn 636
Оптимизация надстроек 636Проблемы, возникающие при использовании надстроек 637
Корректная установка надстроек 638Ссылки на другие файлы 640Указание корректной версии Excel 640
Глава17.Работаслентой 641Знакомство с лентой 641Настройка ленты 643
Добавление кнопки на ленту 643
00_content.indd 17 30.10.2017 22:59:27
Содержание18
Добавление кнопки на панель быстрого доступа 646Ограничения, связанные с настройкой ленты 647
Создание пользовательской ленты 648Добавление кнопки на существующую вкладку 649Добавление флажка на существующую вкладку 654Демонстрация возможностей элементов управления ленты 658Пример элемента управления dynamicMenu 667Дополнительные сведения о настройке ленты 669
Управление лентой с помощью VBA 670Доступ к элементам управления на ленте 671Взаимодействие с лентой 671Активизация вкладки 674
Создание панели инструментов в классическом стиле 674Ограничения классических панелей инструментов в Excel 2007 и более поздних версиях 675Код, предназначенный для создания панели инструментов 675
Глава18.Работасконтекстнымименю 679Обзор объекта CommandBar 679
Типы объектов CommandBar 680Отображение контекстных меню 680Ссылки на объекты CommandBar 681Установка ссылок на элементы управления в объекте CommandBar 682Свойства элементов управления CommandBar 684Отображение всех элементов контекстного меню 684
Настройка контекстных меню с помощью VBA 686Контекстное меню и однодокументный интерфейс 687Сброс контекстных меню 687Отключение контекстного меню 690Отключение элементов контекстного меню 690Добавление нового элемента в контекстное меню ячейки 690Добавление подменю в контекстное меню 693Ограничение контекстных меню единственной книгой 694
Контекстные меню и события 696Автоматическое добавление и удаление меню 696Отключение или сокрытие элементов контекстного меню 696Создание контекстно-зависимого меню 697
Глава19.Созданиесправкидляприложений 701Справка в приложениях Excel 701Справочная система, созданная с помощью компонентов Excel 703
Использование примечаний к ячейке для предоставления справки 704Применение текстового поля для предоставления справки 705Использование рабочего листа для отображения справки 706Отображение справки в пользовательском диалоговом окне 708
00_content.indd 18 30.10.2017 22:59:27
Содержание 19
Отображение справки в окне браузера 712Использование HTML-файлов 712Использование файла MHTML 713
Использование средства HTML Help 714Метод Help 718Связывание файлов справочного руководства с приложением 718Связывание раздела справочного руководства с функцией VBA 719
Глава20.Принципыуправлениямодулямиклассов 721Определение модуля класса 721
Встроенные модули классов 722Пользовательские модули класса 723
Создание класса NumLock 724Вставка модуля класса 724Добавление кода VBA в модуль класса 724Использование модуля класса CNumLock 726
Кодирование свойств, методов и событий 727Программирование свойств объектов 728Программирование методов объектов 729События модулей класса 730
Работа с событием объекта QueryTable 730Создание класса, содержащего другие классы 733
Создание классов CSalesRep и CSalesReps 734Создание классов CInvoice и CInvoices 736Заполнение родительских классов объектами 737Вычисление комиссионных 739
Глава21.Вопросысовместимости 741Что такое совместимость 741Проблемы совместимости 742Избегайте использования новых функций и возможностей 743Поддержка платформы Macintosh 745Использование 64-разрядной версии Excel 746Создание локализованных приложений 748
Многоязычные приложения 749Поддержка языка в VBA 750Использование “местных” свойств 750Идентификация настроек системы 751Параметры настройки даты и времени 753
Часть V. Приложения 755ПриложениеА.СправочникпоинструкциямифункциямVBA 757
Вызов функций Excel в коде VBA 760ПриложениеБ.Примерынасайтекниги 765
Глава 1 766Глава 2 766
00_content.indd 19 30.10.2017 22:59:27
Содержание20
Глава 3 766Глава 4 766Глава 5 766Глава 6 767Глава 7 768Глава 8 769Глава 9 769Глава 10 770Глава 11 771Глава 12 772Глава 13 772Глава 14 773Глава 15 774Глава 16 775Глава 17 775Глава 18 776Глава 19 777Глава 20 777Глава 21 777
Предметныйуказатель 779
00_content.indd 20 30.10.2017 22:59:28