- •Предисловие
- •1. Основы программирования в Microsoft Office
- •1.2. Что такое язык VBA
- •1.3. Макрорекордер: быстрое создание макросов
- •1.4. Четыре способа запуска макроса
- •2.1. Общие сведения
- •2.3.1. Как открыть редактор кода и как он устроен
- •2.3.2. Список объектов и список событий
- •2.3.3. Закладки и разделение окна редактирования
- •2.3.4. Как редактор помогает писать код
- •2.4. Работа со справкой
- •3. Синтаксис и программные конструкции VBA
- •3.1. Основы синтаксиса
- •3.2. Операторы
- •3.3. Переменные и типы данных
- •3.4. Константы
- •3.5. Операторы условного и безусловного перехода
- •3.5.2. Оператор Select Case
- •3.5.3. Оператор GoTo
- •3.6. Работа с циклами
- •3.7. Массивы
- •3.8. Процедуры и функции
- •3.8.1. Виды процедур
- •3.8.2. Область видимости процедур
- •3.8.3. Объявление процедур
- •3.8.4. Передача параметров
- •3.8.5. Вызов и завершение работы процедур
- •3.9. Встроенные функции языка VBA
- •3.9.1. Что такое встроенные функции
- •3.9.2. Функции преобразования и проверки типов данных
- •3.9.3. Строковые функции
- •3.9.4. Функции для работы с числовыми значениями
- •3.9.5. Функции для работы с датой и временем
- •3.9.6. Функции для форматирования данных
- •3.9.7. Функции для организации взаимодействия с пользователем
- •3.9.9. Функции для работы с массивами
- •3.9.10. Функции для работы с файловой системой
- •3.9.11. Другие функции VBA
- •4. Работа с объектами и объектные модели
- •4.1. Что такое классы и объекты
- •4.2. Создание и удаление объектов
- •4.3. Методы объекта
- •4.4. Свойства объекта
- •4.6. Просмотр объектов
- •4.7. Объектные модели
- •5. Формы, элементы управления и события
- •5.1. Для чего нужны формы
- •5.2. Создание форм и самые важные свойства и методы форм
- •5.3. Элементы управления
- •5.3.1. Что такое элемент управления
- •5.3.2. Элемент управления Label
- •5.3.3. Элемент управления TextBox
- •5.3.4. Элемент управления ComboBox
- •5.3.5. Элемент управления ListBox
- •5.3.7. Элементы управления OptionButton и Frame
- •5.3.8. Элемент управления CommandButton
- •5.3.9. Элементы управления ScrollBar и SpinButton
- •5.3.10. Элементы управления TabStrip и MultiPage
- •5.3.11. Элемент управления Image
- •5.3.12. Применение дополнительных элементов управления
- •6. Отладка и обработка ошибок в программе
- •6.1. Типы ошибок
- •6.2.1. Тестирование
- •6.2.2. Переход в режим паузы
- •6.2.3. Действия в режиме паузы
- •6.2.4. Окно Immediate
- •6.2.5. Окно Locals
- •6.2.6. Окно Watches
- •6.3. Перехват и обработка ошибок времени выполнения
- •7. Работа с помощником
- •8. Работа с панелями инструментов и меню
- •9.1. Зачем нужно работать с базами данных
- •9.2. Что такое ADO
- •9.3. Объект Connection и коллекция Errors
- •9.4. Подключение к таблице на листе Excel
- •9.5. Объект Recordset и коллекция Fields
- •9.5.1. Открытие Recordset
- •9.5.3. Перемещение по Recordset
- •9.5.4. Коллекция Fields и объекты Field
- •9.5.5. Сортировка и фильтрация данных
- •9.5.6. Изменение записей на источнике при помощи объекта Recordset
- •9.5.7. Прочие свойства и методы объекта Recordset
- •10. Программирование в Word
- •10.1. Зачем программировать в Word
- •10.3. Объект Application
- •10.3.1. Как работать с объектом Application
- •10.3.2. Свойства, методы и события объекта Application
- •10.4. Коллекция Documents и объекты Document
- •10.4.1. Как работать с коллекцией Documents
- •10.4.2. Свойства и методы коллекции Documents
- •10.4.3. Работа с объектом Document, его свойства и методы
- •10.5. Объекты Selection, Range и Bookmark
- •10.5.1. Работа с объектом Selection
- •10.5.2. Свойства и методы объекта Selection
- •10.5.3. Работа с объектом Range, его свойства и методы
- •10.5.4. Объект Bookmark
- •10.6. Другие объекты Word
- •10.6.1. Коллекция AddIns и объекты AddIn
- •10.6.2. Объект AutoCorrect
- •10.6.3. Коллекция Languages и объект Language
- •10.6.4. Объект Options
- •10.6.5. Объекты Find и Replacement
- •10.6.6. Объекты Font и ParagraphFormat
- •10.6.7. Объект PageSetup
- •10.6.8. Объекты Table, Column, Row и Cell
- •10.6.9. Объект System
- •10.6.10. Коллекция Tasks и объект Task
- •10.6.11. Коллекция Windows и объект Window
- •11. Программирование в Excel
- •11.1. Зачем программировать в Excel
- •11.2. Объект Application
- •11.3. Свойства и методы объекта Application
- •11.4. Коллекция Workbooks и объект Workbook, их свойства и методы
- •11.5. Коллекция Sheets и объект Worksheet, их свойства и методы
- •11.6. Объект Range, его свойства и методы
- •11.7. Коллекция QueryTables и объект QueryTable
- •11.9. Работа с диаграммами (объект Chart)
- •11.10. Другие объекты Excel
- •12. Программирование в Access
- •12.1. отличительные особенности создания приложений в Access
- •12.2. Основные этапы создания приложений в Access
- •12.4. Макрокоманды и объект DoCmd
- •12.5. Работа с формами Access из VBA (объект Form)
- •12.6. Свойства, методы и события форм
- •12.7. Работа с отчетами (объект Report)
- •13. Программирование в Outlook
- •13.1. Зачем программировать в Outlook
- •13.2. Некоторые особенности программирования в Outlook
- •13.4. Объект Namespace
- •13.5. Коллекция Folders и объект MAPIFolder
- •13.7. Другие объекты Outlook
- •14. Программирование в PowerPoint
- •15. Программирование в Project
- •15.1. Основы программирования в Project Professional. Объект Application
ГЛАВА 14
Программирование в PowerPoint
PowerPoint — это программа для работы с презентациями (т. е. с наборами графических изображений — слайдов, иногда со звуковым сопровождением). Использовать возможности VBA в PowerPoint на предприятиях приходится намного реже, чем возможности Word или Excel, однако иногда такая необходимость возникает. Часто специалисты используют презентации PowerPoint для сопровождения выступлений при демонстрации продуктов или услуг, отчетов о деятельности и т. п. Поскольку со слайдами можно связывать звуковое сопровождение, PowerPoint активно используется для целей обучения, например, для подготовки интерактивных уроков. Еще одна часто используемая возможность — создание звуковых книг с картинками для детей. При помощи PowerPoint можно создавать фотоальбомы со звуковым сопровождением, диафильмы со звуком, детские игры и многое другое. И как только данных становится много (например, цифровых фотографий может быть несколько сотен) сразу встает вопрос об автоматизации.
Чаще всего приходится программным способом выполнять следующие дей-
ствия в PowerPoint:
автоматически создавать презентации (например, на основе набора изо-
бражений в каталоге);
производить обработку презентаций — менять формат изображений, до-
бавлять или изменять аудиосопровождение и т. п. Чаще всего подобные действия приходится производить в тех ситуациях, когда презентации были связаны с внешними файлами и эти файлы изменились.
В PowerPoint система объектов выглядит следующим образом:
объект самого высокого уровня — Application с набором свойств и методов, очень похожим на аналогичные объекты в Word и Excel;
Программирование в PowerPoint
уровень ниже — коллекция Presentations с объектами
Можно сказать, что эти объекты по месту в иерархии примерно аналогичны объекту Workbook в Excel;
вобъект Presentation встроена коллекция Slides с объектами Slide. В качестве аналога можно привести листы Worksheet в книгах Excel;
вобъект Slide встроена коллекция Shapes с объектами Shape. Объекты Shape представляют собой все элементы слайда (всего их 22 типа: изображение, надпись, диаграмма, заголовок, таблица, автофигура и т. п.).
Вокруг этих четырех объектов — Application, Presentation, Slide и Shape —
и строится вся объектная модель PowerPoint.
В этой главе мы не будем приводить справку по свойствам и методам различных объектов PowerPoint (их можно быстро найти при помощи макрорекордера), а вместо этого проиллюстрируем работу с PowerPoint на примерах из практики.
Предположим, что нам нужно создать презентацию PowerPoint на основе набора JPG-картинок, которые будут лежать в каталоге C:\Slides (например, они получены со сканера или цифрового фотоаппарата). Имена JPG-файлов следуют по порядку, например, с DSCN2440.JPG по DSCN2480.JPG. Файлов в каталоге может быть произвольное количество, поэтому нам нужно взять все файлы из этого каталога. Наша задача — поместить их в презентацию по порядку. Задача усугубляется тем, что JPG-файлы разного размера (по высоте и ширине), а слайды желательно сделать одинаковыми.
Как ни удивительно, код VBA для PowerPoint удобнее запускать не из PowerPoint, а из внешнего приложения, поддерживающего VBA, например, из Word или Excel. Таким образом, на момент запуска у нас гарантированно не будет активных презентаций и мы ничего не перепутаем при вставке.
Наше решение может выглядеть следующим образом:
1.Создаем новый документ в Word или Excel, в него помещаем кнопку или обеспечиваем другой графический интерфейс по вкусу. Главное — это не забыть добавить в проект ссылки на две объектные библиотеки:
•Microsoft PowerPoint 11.0 Object Library (msppt.olb) — для объектов са-
мого PowerPoint;
•Microsoft Scripting Runtime (ScrRun.dll) — для того, чтобы можно было пользоваться объектом FileSystemObject и другими возможностями для работы с файловой системой. Эта библиотека, которая есть на любом компьютере начиная с Windows 2000, — самый удобный способ выполнения большинства действий в файловой системе.
Далее можно приступать к созданию кода.
358 |
Глава 14 |
2.Конечно, первое, что нам потребуется — запустить PowerPoint. Делается это точно так же, как и для Word, Excel, Access и т. п.:
Dim oApp As New PowerPoint.Application oApp.Activate
oApp.Visible = msoTrue
3. Следующее действие — создание новой пустой презентации:
Dim oPresent As PowerPoint.Presentation
Set oPresent = oApp.Presentations.Add()
Все абсолютно стандартно, как будто мы создаем новый документ Word.
А вот дальше начинаются моменты, специфические для PowerPoint.
4.Следующим действием должно быть создание слайда. Но нам придется создавать столько слайдов, сколько файлов находится в каталоге C:\Slides. Конечно, слайды будут создаваться в цикле. Вначале мы получаем при помощи библиотеки Scripting Runtime (можно было бы обойтись и средствами Office, но так проще) коллекцию всех файлов этого каталога:
Dim oFSO As New Scripting.FileSystemObject
Dim oFolder As Scripting.Folder
Dim oFile As Scripting.File
Set oFolder = oFSO.GetFolder("C:\Slides")
For Each oFile In oFolder.Files
...
Next
Если мы вместо многоточия вставим строку, например, такого вида:
MsgBox oFile.Name
то можно будет убедиться, что мы получили набор файлов в правильном порядке.
5.Далее нам все-таки нужно создать слайды. Делается это при помощи метода Add() коллекции Slides. В документации к русскому PowerPoint 2003 описание этого метода по непонятной причине отсутствует (несмотря на то, что справка по VBA все равно приводится на английском), но из всплывающей подсказки можно догадаться, что этот метод принимает два обязательных параметра: номер слайда в презентации (нумерация должна начинаться с 1), и одно из значений перечисления ppSlideLayout (из нескольких десятков), которое определяет шаблон слайда.
Номер слайда придется обеспечивать счетчиком, а лучший для нас шаблон — пустой:
Программирование в PowerPoint |
359 |
Dim nCounter As Integer nCounter = 1
For Each oFile In oFolder.Files
Set oSlide = oApp.ActivePresentation.Slides.Add(nCounter, _ ppLayoutBlank)
...
nCounter = nCounter + 1 Next
6.А теперь самое главное — вставляем в слайд изображение и настраиваем его размеры. Для этой цели можно использовать метод AddPicture() коллекции Shapes каждого слайда:
oSlide.Shapes.AddPicture FileName:="C:\Slides\" & oFile.Name, _
LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _
Left:=10, Top:=10, Width:=700, Height:=520
Параметр FileName — это имя передаваемого файла. Именно он и будет меняться в цикле. Параметр LinkToFile определяет, будет ли файл изображения помещен внутрь презентации (msoFalse) или в презентацию будет помещена ссылка на него (msoTrue). Конечно, если вставляемые файлы не очень большие, то с точки зрения удобства и производительности презентации лучше помещать изображения внутрь презентации (файла PPT). Параметр SaveWithDocument определяет, сохранять ли изображения вместе с презентацией (в нашем случае сохранять). А параметры Left, Top, Width и Height нужны, чтобы сделать изображения одинакового размера (нужные значения подбираются вручную).
Естественно, код этого пункта помещается вместо многоточия в цикл пункта 5. Чтобы не возиться с удалением обработанных файлов, я бы поместил в цикл еще одну очевидную строку:
oFile.Delete
Итоговый код для нашей задачи может выглядеть так:
Dim oApp As New PowerPoint.Application oApp.Activate
oApp.Visible = msoTrue
Dim oPresent As PowerPoint.Presentation
Set oPresent = oApp.Presentations.Add()
Dim oFSO As New Scripting.FileSystemObject
Dim oFolder As Scripting.Folder
Dim oFile As Scripting.File
360 |
Глава 14 |
Set oFolder = oFSO.GetFolder("C:\Slides") For Each oFile In oFolder.Files
Set oSlide = oApp.ActivePresentation.Slides.Add(nCounter, _ ppLayoutBlank)
oSlide.Shapes.AddPicture FileName:="C:\Slides\" & oFile.Name, _ LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _ Left:=10, Top:=10, Width:=700, Height:=520
oFile.Delete Next
Несколько строк кода могут заменить часы нудной работы по копированию и вставке изображений вручную.
На практике код для создания эффектов анимации, звукового сопровождения, диапазонов фигур и т. п. может оказаться очень сложным. Найти в документации то, что вам нужно, не так-то просто. Рекомендуется для получения "наводящих указаний" активно использовать макрорекордер и анализировать созданный им код. Однако макрорекордер часто выбирает какие-то очень нетривиальные способы выполнения различных действий. Например, для вставки того же рисунка он предлагает использовать код типа:
ActiveWindow.Selection.SlideRange.Shapes.AddPicture ...
что, конечно, задачу не упрощает. Так что код макрорекордера всегда рекомендуется проверять и исправлять.
Задание для самостоятельной работы 14: Программное добавление элементов в слайды
ЗАДАНИЕ:
Создайте макрос в PowerPoint, который бы добавлял во все слайды активной презентации в правый нижний угол надпись "© Академия специальных кур-
сов, 2005" (рис. 14.1).
В реальной работе, возможно, удобнее было поместить этот макрос по внешнее приложение VBA, например, в документ Word или лист Excel, чтобы не копировать этот код для каждой новой презентации. Но в этой работе для простоты код будет выполняться из самого PowerPoint.
Программирование в PowerPoint |
361 |
|
|
|
|
|
|
|
Рис. 14.1. Часть слайда с копирайтом
Ответ к заданию 14
Код макроса может быть, например, таким:
Public Sub InsertCopyRight()
Dim oSlide As Slide
Dim oShape As Shape
'Проходим циклом по всем слайдам в презентации
For Each oSlide In Application.ActivePresentation.Slides
'Для каждого слайда создаем надпись (в виде объекта Shape) 'Нужные значения для числовых параметров Left, Top, Width и 'Height находим подбором или через макрорекордер
Set oShape = oSlide.Shapes.AddTextbox(_ msoTextOrientationHorizontal, 500, 510, 210, 40)
'Доступ к тексту через вложенные объекты TextFrame и TextRange oShape.TextFrame.TextRange.Text = Chr(169) & _
" Академия специальных курсов, 2005"
'Занимаемся украшательством oShape.TextFrame.TextRange.Font.Size = 12 oShape.TextFrame.TextRange.Font.Bold = msoTrue
Next
End Sub