Как управлять презентациями Microsoft PowerPoint с помощью VBA

How to create and add slides to PowerPoint presentations with VBAДанный материал основан и доработан по материалам оригинальной статьи "EasyTweaks - How to create and add slides to PowerPoint presentations with VBA".

Существует ли способ автоматизировать создание презентаций PowerPoint с нуля с последующим быстрым добавлением слайдов к существующей презентации? Мы подумали, что данную задачу для PowerPoint вполне под силу решить с помощью макросов. Однако, как известно, PowerPoint не включает средство записи макросов Macro Recorder (в отличие от Excel и Word, которые имеют встроенные средства записи макросов). Поэтому у нас остаётся лишь старый добрый Visual Basic for Application (VBA), который мы можем использовать для создания простых макросов для автоматизации PowerPoint. Разумеется, существуют и альтернативные варианты автоматизации PowerPoint, но они выходят за рамки данной статьи.

В этом кратком руководстве мы рассмотрим три различных варианта использования:

  • Создание новой презентации (пустой или по шаблону);
  • Добавление слайдов к существующей презентации;
  • Сочетание двух предыдущих вариантов.

Итак, приступим.

Создайте презентацию PowerPoint и сохраните ее с возможностью выполнения макросов (файл с расширением *.pptm).

PowerPoint save as pptm

Посмотрите на Ленту (Ribbon). Если в Ленте нет вкладки "Разработчик" (Developer), то перед началом написания кода необходимо включить эту вкладку (меню ленты File - Options).

PowePoint add Developer Tab in Ribbon

Далее во вкладке Trust Center, включите возможность выполнения макросов в PowerPoint.

Trust Center for VBA in PowerPoint Options

После того, как вы сделаете вкладку "Разработчик" (Developer) видимой для вашей ленты, перейдите на эту вкладку и нажмите кнопку Visual Basic (или просто нажмите Alt + F11), чтобы открыть Visual Basic IDE.

Run Visual Basic Editor from PowerPoint

 

Макрос VBA для создания презентации и добавления слайдов

В редакторе Visual Basic щелкните правой кнопкой мыши VBAProject и выберете пункт вставки модуля (Insert > Module).

Insert Module in VBA for PowerPoint

Вставьте следующий код во вновь созданный модуль:

Sub CreatePres_AddSlides()
Dim NewPres as Presentation
Dim NewSlide as Slide
Set NewPres = Presentations.Add
NewPres.SaveAs("MyPresentation.pptx")
' Title Slide
Set NewSlide = ActivePresentation.Slides.Add(Index:=1, Layout:=ppLayoutTitle)
'This statement adds a blank slide in the second place
Set NewSlide = ActivePresentation.Slides.Add(Index:=2, Layout:=ppLayoutBlank)
'Save the new PowerPoint file
NewPres.SaveAs("MyPresentation.pptx")
End Sub

Нажмите в меню File, а затем Save… При сохранении следует выбрать формат с поддержкой макросов (*.pptm):

Save presentation as pptm

Чтобы запустить код, нажмите Run, а затем выберите Run Sub/UserForm (или просто F5).

Run Sub/UserForm in VBA

В итоге мы увидим созданный и открытый файл презентации.

Create new presentation from VBA

Теперь редактор Visual Basic можно закрыть.

 

Как создавать и вставлять Фигуры (Shapes) в PowerPoint с помощью VBA

Захотелось автоматизировать довольно обыденную задачу по созданию слайдов PowerPoint. При автоматизации PowerPoint вы обычно работаете с коллекцией слайдов и фигур. Слайды говорят сами за себя, а фигуры - это почти все остальное, включая текстовые поля, кнопки действий, медиа-объекты, метки, изображения, выноски, блок-схемы и т.д.. Хотя мы будем демонстрировать приемы работы с PowerPoint, часть синтаксиса на самом деле вполне применима к Microsoft Word и Excel.

Приступим к работе с фигурами. Во-первых, давайте продолжим и откроем редактор VBA, нажав Alt + F11. Если вы следовали предыдущему руководству, у вас должен быть Module1 в вашем списке модулей.

 

Добавление текстового поля через VBA

Начнем с добавления вертикального текстового поля к нашему первому слайду презентации. Добавьте следующий код в Module1, затем нажмите кнопку Сохранить (Ctrl + S) и запустите макрос (пункт меню Run Sub/User Form или просто нажмите F5).

Sub CreateTextBox()
Set MySlide = ActivePresentation.Slides(2)
    With MySlide.Shapes
        .AddTextbox(Orientation:=msoTextOrientationVertical, _
Left:=90, Top:=200, Width:=80, Height:=200).TextFrame.TextRange.Text = ("Это моё вертикальное тестовое поле")
End With
End Sub

Add text shape

Обратите внимание, что вы можете довольно легко изменить размер текстового поля с помощью VBA. В этом случае мы изменим размер первой фигуры на втором слайде, свободно меняйте код при необходимости.

Sub ResizeText()
Set MyShape = ActivePresentation.Slides(2).Shapes(1)
'Add your required dimensions as needed below
With MyShape
.Width = 200
.Height = 35
End With
End Sub

Resize text shape

 

Текстовые эффекты PowerPoint с VBA

Давайте теперь предположим, что мы хотим добавить текстовое поле ко всем слайдам в презентации, на этот раз немного более визуально привлекательное. Для этого мы будем использовать VBA для создания пользовательских текстовых эффектов, которые мы можем встроить в один или несколько слайдов презентации. Сначала мы пройдемся по слайдам презентации, а затем добавим текстовый эффект по мере необходимости.

Sub SetEffects()
Dim i As Integer
For i = 1 To ActivePresentation.Slides.Count
ActivePresentation.Slides(i) _
.Shapes.AddTextEffect msoTextEffect12, "Проба пера", _
"Segoe UI", 32, msoTrue, msoTrue, 650, 50
Next
End Sub

Посмотрим, что получилось:

Add text effect in shape

Обратите внимание, что вы можете использовать простой водяной знак для достижения этого конкретного результата.

 

Выноски PowerPoint с VBA

В нашем следующем примере мы добавим выноску ко второму слайду презентации.

Sub CreateCallout()
ActivePresentation.Slides(2).Shapes.AddCallout(Type:=msoCalloutTwo, Left:=200, Top:=50, _
Width:=300, Height:=100).TextFrame.TextRange.Text = "Моя выноска"
End Sub

Add Callout in Shape

 

Создание презентации PowerPoint из книги Excel

Рассмотрим ещё один случай, когда вы хотите создать презентацию PowerPoint прямо из электронной таблицы Excel. Вы можете использовать аналогичный метод в Word и других приложениях Microsoft Office.

Данный пример демонстрирует возможность вызова другого приложения MS Office из первоначально запущенного приложения (прим. пер.).

Сперва создайте новую книгу Excel и сохраните ее как книгу с макросами (файл с расширением *.xlsm).

Save file as xlsm

Войдите в редактор Visual Basic Editor (меню ленты Developer > Visual Basic, либо сочетанием клавиш Alt+F11)

Open VBE from Excel

В редакторе VBE свяжите электронную таблицу с моделью данных PowerPoint, выбрав в меню (Tools > References), Microsoft PowerPoint Object Library.

References in VBA

Add Microsoft PowerPoint Object Library

Вставьте новый модуль VBA для внесения кода процедуры Visual Basic.

Insert Module in VBA for Excel

Вставьте приведенный ниже код VBA непосредственно в модуль VBA и нажмите иконку Save.

(При необходимости, вы можете внести свои изменения в сценарий.)

Sub CreatePresentationFromExcel()
'
Dim MyPPt As PowerPoint.Application
Dim NewPres As PowerPoint.Presentation
Dim NewSlide As Slide
Set MyPPt = CreateObject("PowerPoint.Application")
'
Set NewPres = MyPPt.Presentations.Add
Set NewSlide = MyPPt.ActivePresentation.Slides.Add(Index:=1, Layout:=ppLayoutTitle)
'
End Sub

Module code in VBA

Вставьте кнопку прямо в электронную таблицу Excel (меню Developer > Insert, а затем выберите Button (Form Control)).

Insert Button control in Excel

Привяжите в диалоговом окне процедуру VBA, созданную вами ранее, к вставляемой кнопке.

Assign Macro in Excel

Нажмите кнопку и проверьте результат.

PowerPoint file created from Excel

Всего комментариев: 3 Комментировать

  1. Михаил /

    Петр, добрый день!

    Спасибо за интересную статью!

    По вопросам размещения материалов в группе ВК MS Excel Tips&Tricks свяжитесь, пожалуйста, со мной (Михаил Захаров).

    У Вас закрыты сообщения.

    1. Пётр Окунев / Автор записи

      Михаил, здравствуйте!
      Могу связаться с вами через ВК, напрямую?

  2. Илья Довнарович /

    А как решить вот такое техническое задание. Помогите.

    Написать скрипт для реализации меню интерактивного курса, собранного в
    PowerPoint: после прохождения каждого модуля курса пользователь должен
    возвращаться в меню, при этом изученные ранее модули отмечаются как пройденные
    и доступные для повторного просмотра. Модули, которые еще не пройдены, остаются
    закрытыми.

Добавить комментарий