Скопировать слайд powerpoint vba

Обновлено: 06.07.2024

Работа с 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

Следующее действие — нужно создать новую пустую презентацию:

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

Если мы вместо многоточия поставим строку, например такого вида:

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

Далее нам все-таки нужно создать слайды. Делается это при помощи метода Add() коллекции Slides. В документации к русскому PowerPoint 2003 описание этого метода по непонятной причине отсутствует (даже несмотря на то, что справка по VBA все равно на английском), но из всплывающей подсказки можно догадаться, что этот метод хочет принимать два параметра (обязательных): номер слайда в презентации, который должен начинаться с 1, и одно из значений перечисления ppSlideLayout (из нескольких десятков), которое определяет шаблон слайда.

Номер слайда придется обеспечивать счетчиком, а наилучший для нас шаблон — пустой:

Dim nCounter As Integer

For Each oFile In oFolder.Files

Set oSlide = oApp.ActivePresentation.Slides.Add(nCounter, ppLayoutBlank)

nCounter = nCounter + 1

А теперь — самое главное: вставляем в слайд изображение и настраиваем его размеры. Для этой цели можно использовать метод 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 нужны, чтобы сделать изображения одинакового размера (чтобы подобрать нужные значения, я занимался обычным подбором по методу "недолет-перелет").

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

Итоговый код для нашей задачи может выглядеть так:

Dim oApp As New PowerPoint.Application

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

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

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

что, конечно, задачу не упрощает. Так что код макрорекордера всегда рекомендуется проверять и исправлять.

Напишите макрос PowerPoint, который бы добавлял во все слайды активной презентации в правый нижний угол надпись "© Академия специальных курсов, 2006".

в реальной работе, возможно, удобнее было поместить этот макрос по внешнее приложение VBA, например, документ Word или лист Excel — чтобы не копировать этот код для каждой новой презентации. В этой работе для простоты код будет выполняться из самого PowerPoint.

Код макроса может быть, например, таким:

Public Sub InsertCopyRight()

Dim oSlide As Slide

Dim oShape As Shape

'Проходим циклом по всем слайдам в презентации

For Each oSlide In Application.ActivePresentation.Slides

'Для каждого слайда создаем надпись (в виде объекта Shape)

'Нужные значения для числовых параметров Left , Top , Width и Height находим

Я хочу вырезать один слайд и вставить его в виде картинки в тот же файл презентации (формат ppt).

Я знаю, что следующий код VBA работает для copy&paste в одном слайде.

Что я хочу знать, так это как вставить слайд в виде "picture". ('вставить как картинку' опция Специальная вставка [например, вставить в PNG,JPEG. ])

Есть ли какие-нибудь предложения о том, как это сделать?

1 ответ

У меня есть сценарий VBA, который ищет в одном PowerPoint (PRS_data) совпадение заголовка, а затем копирует слайд в новый PowerPoint (PRS). Слайды на источнике - это просто заголовок и изображение. Когда некоторые слайды копируются, изображения либо не переносятся, либо я получаю коробку с красным.

Я хотел бы иметь возможность запускать скрипты Python (которые создают слайды и содержимое) из PowerPoint , точно так же, как значок в надстройке. Я видел, что это возможно в Excel с помощью программы под названием ExcelPython , а сценарии Py называются с помощью VBA. Но для PowerPoint, в любом.

Да, ваш код был довольно близок. Вот пример того, как взять слайд 1 и вставить его в качестве изображения на слайде 2.

Вы можете посмотреть PpPasteDataType для получения дополнительных форматов для вставки.

Похожие вопросы:

В Редакторе Powerpoint VBA мы получаем список слайдов в окне проекта VBA, классифицированных в разделе Microsoft PowerPoint Objects. Этот список будет включать слайды с элементами управления.

У меня есть встроенная презентация PowerPoint в рабочей книге Excel. Как я могу редактировать это (открывать, копировать слайды, добавлять данные в слайды, закрывать) с помощью VBA?

Я пытаюсь создать кнопку назад, но с помощью гиперссылок она просто переносит меня на предыдущую страницу и заканчивается в цикле. например, если у меня есть слайд 1, который имеет ссылки на слайд.

У меня есть сценарий VBA, который ищет в одном PowerPoint (PRS_data) совпадение заголовка, а затем копирует слайд в новый PowerPoint (PRS). Слайды на источнике - это просто заголовок и изображение.

Я хотел бы иметь возможность запускать скрипты Python (которые создают слайды и содержимое) из PowerPoint , точно так же, как значок в надстройке. Я видел, что это возможно в Excel с помощью.

Я пытаюсь написать оглавление в начале моей презентации powerpoint. Код, который у меня есть, извлекает все слайды с заголовком и печатает их вместе с индексом. Я хотел бы знать, где я могу найти.

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

Ищу какой-нибудь VBA скрипт, который возьмет excel диаграмм и поместит их в PowerPoint презентации на определенных слайдах и местах в этом PowerPoint. У меня есть лист excel с примерно 40.

Мне нужно копировать и вставлять определенные таблицы из excel и вставлять их в презентацию powerpoint в виде изображения bitmap раз в месяц. Это занимает от 2 до 3 часов, когда я делаю это вручную.

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

Использовать возможности 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

Следующее действие — нужно создать новую пустую презентацию:

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

Если мы вместо многоточия поставим строку, например такого вида:

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

Далее нам все-таки нужно создать слайды. Делается это при помощи метода Add() коллекции Slides. В документации к русскому PowerPoint 2003 описание этого метода по непонятной причине отсутствует (даже несмотря на то, что справка по VBA все равно на английском), но из всплывающей подсказки можно догадаться, что этот метод хочет принимать два параметра (обязательных): номер слайда в презентации, который должен начинаться с 1, и одно из значений перечисления ppSlideLayout (из нескольких десятков), которое определяет шаблон слайда.

Номер слайда придется обеспечивать счетчиком, а наилучший для нас шаблон — пустой:

Dim nCounter As Integer

For Each oFile In oFolder.Files

Set oSlide = oApp.ActivePresentation.Slides.Add(nCounter, ppLayoutBlank)

nCounter = nCounter + 1

А теперь — самое главное: вставляем в слайд изображение и настраиваем его размеры. Для этой цели можно использовать метод 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 нужны, чтобы сделать изображения одинакового размера (чтобы подобрать нужные значения, я занимался обычным подбором по методу "недолет-перелет").

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

Итоговый код для нашей задачи может выглядеть так:

Dim oApp As New PowerPoint.Application

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

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

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

что, конечно, задачу не упрощает. Так что код макрорекордера всегда рекомендуется проверять и исправлять.

Как объединить несколько презентаций PowerPoint

  1. Метод повторного использования слайдов
  2. Метод кода VBA
  3. Скопируйте и вставьте слайды.

У каждого метода есть свои преимущества и недостатки. Выбирай с умом.

1]Метод повторного использования слайдов

Как объединить несколько презентаций PowerPoint

  1. Откройте новый файл Powerpoint или существующий, в котором вы хотите объединить слайды.
  2. Выберите слайд, после которого вы хотите вставить слайды из исходного файла.
  3. Идти к Главная> Новый слайд> Повторное использование слайда.
  4. Найдите и выберите файл, который вы хотите объединить. Затем нажмите кнопку со стрелкой.
  5. Это покажет все стороны, доступные на этом слайде.
  6. Щелкните слайд, который хотите вставить, и он будет немедленно добавлен к слайду.
  7. Если вы хотите, чтобы формат был точно таким же, как у исходного слайда, установите флажок «Сохранить исходное форматирование. »

Любой добавленный сюда слайд является копией. Исходный файл останется нетронутым, и в него не будут внесены никакие изменения. Любые изменения, внесенные в объединенный документ, не будут доступны в исходном файле.

Одна из лучших частей импорта с использованием этого метода заключается в том, что он сохранит всю анимацию или переходы. Раньше этого не было, и нужно было использовать метод Object, а затем несколько конфигураций, чтобы заставить его работать. Объектный метод полезен только в том случае, если вы хотите упаковать несколько файлов в один.

2]Метод кода VBA

Поскольку нет собственного метода для объединения множества презентаций PowerPoint, нам придется использовать код VBA, точно так же, как мы это делали для объединения файлов Excel. Он прост и работает лучше по сравнению с кодом VBA, который мы использовали для Excel. Код работал у меня хорошо, и я смог объединить 3 файла PowerPoint на 60 слайдов.

Объединить несколько презентаций с использованием кода VBA

В новом или существующем файле PowerPoint, в котором вы хотите объединить все презентации, нажмите ALT + F11.

Щелкните Вставить> Модуль и вставьте код в этот модуль. Не беспокойтесь о его сохранении.

Внесите изменения, которые я выделил жирным шрифтом.

Нажмите F5, и он выполнит код

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

3]Копировать Вставить слайды

Сохранить исходное форматирование презентации PowerPoint

Я использую это иногда, когда есть несколько файлов, обычно меньше трех, и мне нужно скопировать из них только несколько слайдов. Хотя вы можете использовать Ctrl + C и Ctrl + V, но вы потеряете форматирование. Поэтому после копирования слайда щелкните правой кнопкой мыши раздел списка слайдов в конечном файле и выберите «Сохранить формат».

Я надеюсь, что всем этим методам было легко следовать, и вы смогли объединить несколько файлов PowerPoint.

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

Читайте также: