- •Учреждение образования "Гродненский государственный профессионально-технический колледж приборостроения"
- •1. Синтаксис и программные конструкции vba
- •1.1 Основы синтаксиса языка vba
- •1.2 Операторы vba
- •1.3 Переменные и типы данных
- •Задание для самостоятельной работы 1.1: Работа с переменными и операторами
- •1.4 Константы
- •1.5 Операторы условного и безусловного перехода
- •1.5.1 Операторы условного и безусловного перехода. Оператор If… Then... Else
- •1.5.2 Оператор Select Case
- •1.5.3 Оператор GoTo
- •Задание для самостоятельной работы 1.2: Работа с операторами условного перехода
- •1.6 Работа с циклами
- •1.7 Массивы
- •Задание для самостоятельной работы 1.3 Работа с циклами
- •1.8 Процедуры и функции
- •1.8.1 Процедуры и функции. Виды процедур
- •1.8.2 Область видимости процедур
- •1.8.3 Объявление процедур
- •1.8.4 Передача параметров
- •1.8.5 Запуск и завершение работы процедур
- •Задание для самостоятельной работы 1.4 Работа с процедурами и функциями
- •1.9 Встроенные функции языка Visual Basic For Applications
- •1.9.1 Встроенные функции языка Visual Basic For Applications
- •1.9.2 Функции преобразования и проверки типов данных
- •1.9.3 Строковые функции
- •1.9.4 Функции для работы с числовыми значениями
- •1.9.5 Функции для работы с датой и временем
- •1.9.6 Функции для форматирования данных
- •1.9.7 Функции для организации взаимодействия с пользователем
- •1.9.8 Функции — заменители синтаксических конструкций
- •1.9.9 Функции для работы с массивами
- •1.9.10 Функции для работы с файловой системой
- •1.9.11 Прочие функции vba
- •2. Работа с объектами и объектные модели
- •2.1 Что такое классы и объекты
- •2.2 Создание и удаление объектов
- •2.3 Методы объекта
- •2.4 Свойства объекта
- •2.5 События объекта и объявление WithEvents
- •2.6 Просмотр объектов
- •2.7 Объектные модели
- •Задание для самостоятельной работы 2.1 Windows Script Host в приложениях vba
- •3. Формы, элементы управления и события
- •3.1 Для чего нужны формы
- •3.2 Создание форм и самые важные свойства и методы форм
- •3.3 Элементы управления
- •3.3.1 Что такое элементы управления
- •3.3.2 Элемент управления Label (надпись)
- •3.3.3 Элемент управления TextBox (текстовое поле)
- •3.3.4 Элемент управления ComboBox (комбинированный список)
- •3.3.5 Элемент управления ListBox (список)
- •3.3.6 Элементы управления CheckBox (флажок) и ToggleButton (кнопка с фиксацией)
- •3.3.7 Элементы управления OptionButton (переключатель) и Frame (рамка)
- •3.3.8 Элемент управления CommandButton (кнопка)
- •3.3.9 Элементы управления ScrollBar (полоса прокрутки) и SpinButton (счетчик)
- •3.3.10 Элементы управления TabStrip (набор вкладок) и MultiPage (набор страниц)
- •3.3.11 Элемент управления Image (рисунок)
- •3.3.12 Применение дополнительных элементов управления. Элементы управления Microsoft Web Browser, Calendar, RefEdit
- •Задание для самостоятельной работы 3.1 Работа с элементами управления
- •4. Работа с панелями инструментов и меню
- •Задание для самостоятельной работы 4.1 Работа с панелями инструментов, меню и помощником
- •5. Программирование в Word
- •5.1 Зачем программировать в Word
- •5.2 Введение в программирование в Word. Обзор объектной модели Word
- •5.3 Объект Application
- •5.3.1 Как работать с объектом Application
- •5.3.2 Свойства, методы и события объекта Application
- •5.4 Коллекция Documents и объекты Document
- •5.4.1 Как работать с коллекцией Documents
- •5.4.2 Свойства и методы коллекции Documents
- •5.4.3 Работа с объектом Document , его свойства и методы
- •5.5 Объекты Selection , Range и Bookmark
- •5.5.1 Работа с объектом Selection
- •5.5.2 Свойства и методы объекта Selection
- •5.5.3 Работа с объектом Range, его свойства и методы
- •5.5.4 Объект Bookmark
- •5.6 Другие объекты Word
- •5.6.1 Коллекция AddIns и объекты AddIn
- •5.6.2 Объект AutoCorrect
- •5.6.3 Коллекция Languages и объект Language
- •5.6.4 Объект Options
- •5.6.5 Объекты Find и Replacement
- •5.6.6 Объекты Font и ParagraphFormat
- •5.6.7 Объект PageSetup
- •5.6.8 Объекты Table , Column, Rowи Cell
- •5.6.9 Объект System
- •5.6.10 Коллекция Tasks и объект Task
- •5.6.11 Коллекция Windows и объект Window
- •Задание для самостоятельной работы 5.1 Программное формирование документа в Word
- •6. Программирование в Excel
- •6.1 Зачем программировать в Excel
- •6.2 Объект Application
- •6.3 Свойства и методы объекта Application
- •6.4 Коллекция Workbooks и объект Workbook, их свойства и методы
- •6.5 Коллекция Sheets и объект Worksheet , их свойства и методы
- •6.6 Объект Range, его свойства и методы
- •6.7 Коллекция QueryTables и объект QueryTable
- •6.8 Работа со сводными таблицами (объект PivotTable)
- •6.9 Работа с диаграммами: объект Chart
- •6.10 Другие объекты Excel
- •Задание для самостоятельной работы 6.1 Применение Excel для анализа информации из базы данных
- •7. Программирование в Access
- •7.1 Отличительные особенности создания приложений Access
- •7.2 Основные этапы создания приложений Access
- •7.3 Объект Application , его свойства и методы
- •7.4 Макрокоманды и объект DoCmd
- •7.5 Работа с формами Access из vba (объект Form )
- •7.6 Свойства, методы и события форм
- •7.7 Работа с отчетами (объект Report )
- •7.8 Другие объекты Access
- •Задание для самостоятельной работы 7.1 Создание приложения vba в Access
- •8. Программирование в PowerPoint
- •Задание для самостоятельной работы 8.1 Программное добавление элементов в слайды
8. Программирование в PowerPoint
Работа с PowerPoint из VBA, автоматизация создания презентаций, объекты PowerPoint.Application, PowerPoint.Presentation, PowerPoint.Slide, PowerPoint.Shape
Использовать возможности VBA в PowerPoint на предприятиях приходится намного реже, чем возможности Word или Excel, однако иногда такие потребности возникают. Часто специалисты используют презентации PowerPoint для сопровождения выступлений при демонстрации продуктов или услуг, отчетов о деятельности и т.п. Поскольку со слайдами можно связывать звуковое сопровождение, PowerPoint активно используется для целей обучения — например, подготовки интерактивных уроков. Еще одна часто используемая возможность — создание звуковых книг с картинками для детей. При помощи PowerPoint можно создавать фотоальбомы со звуковым сопровождением, диафильмы со звуком, детские игры и многое другое. И как только данных становится много (а, например, цифровых фотографий редко бывает мало) сразу встает вопрос об автоматизации.
PowerPoint — программа работы с презентациями (то есть наборами графических изображений — слайдов, иногда со звуковым сопровождением). Чаще всего приходится программным способом выполнять следующие действия:
автоматически создавать презентации (например, на основе набора изображений в каталоге);
производить обработку презентаций — менять формат изображения, добавлять или изменять аудиосопровождение и т.п. Чаще всего подобные действия приходится производить в тех ситуациях, когда презентации были связаны с внешними файлами и эти файлы изменяются.
В PowerPoint система объектов выглядит следующим образом:
объект самого высокого уровня — Application, с набором свойств и методов, очень похожим на аналогичные объекты в Word и Excel;
на уровень ниже — коллекция Presentations с объектами Presentation. Можно сказать, что эти объекты по месту в иерархии примерно аналогичны объекту Workbook в Excel;
в объект Presentation встроена коллекция Slides с объектами Slide (в качестве примерного аналога можно привести листы в книгах 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. Так на момент запуска у нас гарантированно не будет активных презентаций и мы ничего не перепутаем с точки зрения вставки.
Как может выглядеть наше решение:
Создаем новый документ в Word или Excel, в него помещаем кнопку или обеспечиваем другой графический интерфейс по вкусу. Главное — не забыть добавить в проект ссылки на две объектные библиотеки:
Microsoft PowerPoint 11.0 Object Library (C:\Program Files\Microsoft Office\Office 11\msppt.olb) — для объектов самого PowerPoint;
Microsoft Scripting Runtime (C:\Windows\System32\ScrRun.dll) — для того , чтобы можно было пользоваться объектом FileSystemObject и прочими для работы с файловой системой . Эта библиотека, которая есть на любом компьютере начиная с Windows 2000, — самый удобный способ выполнения большинства действий в файловой системе.
Далее можно приступать к созданию кода.
Конечно, первое, что нам потребуется — запустить PowerPoint. Делается это точно так же, как и для Word, Excel, Access и т.п.:
Dim oApp As New PowerPoint.Application
oApp.Activate
oApp.Visible = msoTrue
Следующее действие — нужно создать новую пустую презентацию:
Dim oPresent As PowerPoint.Presentation
Set oPresent = oApp.Presentations.Add()
Все абсолютно стандартно, как будто мы создаем новый документ Word. А вот дальше начинаются моменты, специфические для PowerPoint и нашей задачи
Следующим действием должно быть создание слайда. Но нам придется создать столько слайдов, сколько файлов находится в каталоге 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
то можно будет убедиться, что набор файлов в правильном порядке мы получили.
Далее нам все-таки нужно создать слайды. Делается это при помощи метода Add() коллекции Slides. В документации к русскому PowerPoint 2003 описание этого метода по непонятной причине отсутствует (даже несмотря на то, что справка по VBA все равно на английском), но из всплывающей подсказки можно догадаться, что этот метод хочет принимать два параметра (обязательных): номер слайда в презентации, который должен начинаться с 1, и одно из значений перечисления ppSlideLayout (из нескольких десятков), которое определяет шаблон слайда.
Номер слайда придется обеспечивать счетчиком, а наилучший для нас шаблон — пустой:
Dim nCounter As Integer
nCounter = 1
For Each oFile In oFolder.Files
Set oSlide = oApp.ActivePresentation.Slides.Add(nCounter, ppLayoutBlank)
…
nCounter = nCounter + 1
Next
А теперь — самое главное: вставляем в слайд изображение и настраиваем его размеры. Для этой цели можно использовать метод 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 нужны, чтобы сделать изображения одинакового размера (чтобы подобрать нужные значения, я занимался обычным подбором по методу "недолет-перелет").
Естественно, код этого пункта помещается вместо многоточия в цикл. Чтобы не возиться с удалением обработанных файлов, я поместил в цикл еще одну очевидную строку:
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
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
Несколько строк кода могут заменить часы нудной работы по копированию и вставке изображений вручную.
На практике работа с PowerPoint может быть достаточно сложной при работе с эффектами анимации, звуковым сопровождением, диапазонами фигур и т.п. Найти в документации то, что вам будет нужно, не так-то просто. Рекомендуется для получения "наводящих указаний" активнее использовать макрорекордер и анализировать созданный им код. Однако макрорекордер часто выбирает какие-то очень нетривиальные способы выполнения различных действий. Например, для вставки того же рисунка он предлагает использовать код типа
ActiveWindow.Selection.SlideRange.Shapes.AddPicture …
что, конечно, задачу не упрощает. Так что код макрорекордера всегда рекомендуется проверять и исправлять.