Данный материал основан и доработан по материалам оригинальной статьи "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).
Посмотрите на Ленту (Ribbon). Если в Ленте нет вкладки "Разработчик" (Developer), то перед началом написания кода необходимо включить эту вкладку (меню ленты File - Options).
Далее во вкладке Trust Center, включите возможность выполнения макросов в PowerPoint.
После того, как вы сделаете вкладку "Разработчик" (Developer) видимой для вашей ленты, перейдите на эту вкладку и нажмите кнопку Visual Basic (или просто нажмите Alt + F11), чтобы открыть Visual Basic IDE.
Макрос VBA для создания презентации и добавления слайдов
В редакторе Visual Basic щелкните правой кнопкой мыши VBAProject и выберете пункт вставки модуля (Insert > Module).
Вставьте следующий код во вновь созданный модуль:
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):
Чтобы запустить код, нажмите Run, а затем выберите Run Sub/UserForm (или просто F5).
В итоге мы увидим созданный и открытый файл презентации.
Теперь редактор 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
Обратите внимание, что вы можете довольно легко изменить размер текстового поля с помощью 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
Текстовые эффекты 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
Посмотрим, что получилось:
Обратите внимание, что вы можете использовать простой водяной знак для достижения этого конкретного результата.
Выноски PowerPoint с VBA
В нашем следующем примере мы добавим выноску ко второму слайду презентации.
Sub CreateCallout()
ActivePresentation.Slides(2).Shapes.AddCallout(Type:=msoCalloutTwo, Left:=200, Top:=50, _
Width:=300, Height:=100).TextFrame.TextRange.Text = "Моя выноска"
End Sub
Создание презентации PowerPoint из книги Excel
Рассмотрим ещё один случай, когда вы хотите создать презентацию PowerPoint прямо из электронной таблицы Excel. Вы можете использовать аналогичный метод в Word и других приложениях Microsoft Office.
Данный пример демонстрирует возможность вызова другого приложения MS Office из первоначально запущенного приложения (прим. пер.).
Сперва создайте новую книгу Excel и сохраните ее как книгу с макросами (файл с расширением *.xlsm).
Войдите в редактор Visual Basic Editor (меню ленты Developer > Visual Basic, либо сочетанием клавиш Alt+F11)
В редакторе VBE свяжите электронную таблицу с моделью данных PowerPoint, выбрав в меню (Tools > References), Microsoft PowerPoint Object Library.
Вставьте новый модуль VBA для внесения кода процедуры Visual Basic.
Вставьте приведенный ниже код 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
Вставьте кнопку прямо в электронную таблицу Excel (меню Developer > Insert, а затем выберите Button (Form Control)).
Привяжите в диалоговом окне процедуру VBA, созданную вами ранее, к вставляемой кнопке.
Нажмите кнопку и проверьте результат.
Петр, добрый день!
Спасибо за интересную статью!
По вопросам размещения материалов в группе ВК MS Excel Tips&Tricks свяжитесь, пожалуйста, со мной (Михаил Захаров).
У Вас закрыты сообщения.
Михаил, здравствуйте!
Могу связаться с вами через ВК, напрямую?
А как решить вот такое техническое задание. Помогите.
Написать скрипт для реализации меню интерактивного курса, собранного в
PowerPoint: после прохождения каждого модуля курса пользователь должен
возвращаться в меню, при этом изученные ранее модули отмечаются как пройденные
и доступные для повторного просмотра. Модули, которые еще не пройдены, остаются
закрытыми.