Найти в Дзене
Doc

Сортировка, фильтрация и навигация по презентации + создание разделов в PowerPoint с помощью Excel

Многим, кто постоянно работает с приложением Microsoft Powerpoint, приходится сталкиваться со следующей проблемой.

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

Или, к примеру, слайдов более 100, а редактировать нужно всего лишь три. И расположены они в разных частях презентации. Если пользоваться "рабоче-крестьянскими" т.е. штатными средствами Power Point, то максимум, что вы можете использовать - это поиск нужных слов на слайде с помощью инструмента "поиск" или чем-то вроде, способов на самом деле много, но они не всегда эффективны и почти никогда не смогут так экономить время, как использование мощи программы Microsoft Excel, ну и, конечно же, программы VBA для из связи.

Ну начнем с самого начала.

Условие нашей задачи:

Создание на листе Excel таблицы, в которую будут вноситься данные:

1. для новой презентации PowerPoint, для которой таблица будет являться источником слайдов (кроме того, создадим столбец, который будет создавать текстовое поле с названием слайда и столбец для новой сортировки слайдов).

2. из уже открытой презентации, в таблицу будут заноситься данные: наименование слайда, порядковый номер слайда.

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

4. добавим на лист Excel необходимые кнопки для создания презентации, синхронизации таблицы и презентации, сортировки презентации.

Примерно так должна выглядеть таблица. В нее для примера можно выводить иконки слайдов (при условии небольшой презентации). При большом количестве иконок, размер файла Excel растет неоправданно быстро
Примерно так должна выглядеть таблица. В нее для примера можно выводить иконки слайдов (при условии небольшой презентации). При большом количестве иконок, размер файла Excel растет неоправданно быстро

Алгоритм нашей работы работы будет следующим:

1. Подключаем (если у вас не подключена) в редакторе VBA программы Excel библиотеку объектов Power Point.

Переходим на вкладку "Разработчик" и нажимаем на кнопку Visual Basic или на комбинацию клавиш Alt+F11
Переходим на вкладку "Разработчик" и нажимаем на кнопку Visual Basic или на комбинацию клавиш Alt+F11

В появившимся окне редактора VBA выполняем следующие действия:

В результате наших действий мы "подключаем" к нашему приложению Excel библиотеку объектов PowerPoint.

Конечно, же если вы прекрасно знаете объектную модель приложения PowerPoint, то можно работать без подключенной библиотеки. Просто использовать переменные типа Object, но в этом способе есть минусы - редактор VBA не будет показывать вам подсказки при наборе команд и ваш файл не будет работать на другом компьютере, если на нем не будет подключена бибилиотека PowerPoint. Но в этом нет ничего страшного, если вы делаете этот файл для себя :)

2. На рабочем листе Excel создаем таблицу, из нашего первого рисунка.

3. Вставляем на лист кнопки, которые будут отвечать за:

а) создание новой презентации;

б) синхронизацию таблицы ексель и открытой презентации PowerPoint;

в) сортировку таблицы ексель и приведение новому порядку строк нового порядка расположения слайдов в презентации;

г) создание нового раздела в презентации.

Ну, еще раз повторим этот рисунок со всеми перечисленными элементами
Ну, еще раз повторим этот рисунок со всеми перечисленными элементами

На этом, мы закончили подготовительную часть и переходим к основной части - "Созданию кода для совместной работы приложений"

Теперь нам необходимо написать код VBA для каждой кнопки на листе. Для этого щелкаем два раза последовательно на каждой кнопке начиная с кнопки "структура".

В появившемся окне редактора VBA между строками Private Sub структура_Click и End Sub  прописываем следующий код. Вы можете просто скопировать его из статьи и вставить в свой файл Excel
В появившемся окне редактора VBA между строками Private Sub структура_Click и End Sub прописываем следующий код. Вы можете просто скопировать его из статьи и вставить в свой файл Excel

1. Вводим переменные, необходимые для работы

Dim ppt As PowerPoint.Application
Dim prA As PowerPoint.Presentation
Dim slW As PowerPoint.Slide
Dim shP As PowerPoint.Shape

Это переменные для объектов приложения PowerPoint. Так как, мы подключили библиотеку указанного приложения, то мы можем себе позволить при описании типа переменных пользоваться объектной моделью PowerPoint, на что указывает само название приложения в описании типа переменной.

Далее,

Dim ws As Worksheet
Dim rW As Range
Dim r As Range
Dim i As Integer

Это обычные переменные для приложения Excel (рабочий лист, диапазоны и числовая переменная для счетчика)

2. Присваиваем нашим переменным значения. Так как по нажатию первой кнопки мы должны создавать презентацию, то команда будет выглядеть так:

Set ppt = CreateObject("powerpoint.application")
ppt.Visible = msoTrue

Эти две строки присваивают переменной ppt переменную Object, которая описывает приложение PowerPoint и следующая строка делает это приложение видимым.

Если вы попробуете на нашем листе нажать на кнопку структура, то у Вас должна открыться программа PowerPoint. Если получилось, то вы идете правильным путем и продолжаем дальше.

Следующая строка добавляет в открытое приложение PowerPoint новую презентацию

Set prA = ppt.Presentations.Add

Теперь опишем переменные для нашего приложения Excel

Set ws = ActiveSheet
Set rW = ws.Cells(5, 1).CurrentRegion

Первой строкой мы присваиваем переменной ws значение, соответствующее активному листу Excel, т.е. тому листу на котором расположена наша таблица и кнопки. Во второй строке определяется диапазон нашей таблицы, которая определяет состав (количество слайдов) нашей планируемой к созданию презентации.

На тот случай, если в нашей таблице пока только шапка таблицы, а сами строки (читай слайды в презентацию) пользователь забыл внести необходимо проверить количество рабочих строк, дабы избежать ошибки :)

If rW.Rows.Count = 1 Then
MsgBox "В таблице недостаточно строк"
Exit Sub
End If

Если строк нет, то по команде Exit Sub наша процедура остановит свою работу после вывода на экран сообщения "В таблице недостаточно строк"

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

Set rW = rW.Offset(1).Resize(rW.Rows.Count - 1)

Эта строка определяет диапазон строк, которые будут являться основой для новых слайдов

Теперь мы перебираем каждую строку диапазона rW и добавляем в презентацию слайды

For i = 1 To rW.Rows.Count
Set slW = prA.Slides.Add(i, ppLayoutBlank)
rW.Cells(i, 2) = slW.Name
Set shP = slW.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, prA.PageSetup.SlideWidth, 40)
shP.Name = "краткое_содержимое"
With shP.TextFrame
.TextRange = rW.Cells(i, 4)
.TextRange.Font.Size = 24
.TextRange.ParagraphFormat.Alignment = ppAlignCenter
End With
Next i

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