Как создать цикл в PowerPoint VBA?
-
19-09-2019 - |
Вопрос
Насколько я знаю, приведенный ниже код извлекает фигуру из активного окна, немного подталкивает ее, копирует слайд и вставляет его сразу после текущего, затем превращает вставленный слайд в активное окно и подталкивает его снова:
Дополнительный тест()
' Get the active presentation Dim oPresentation As Presentation Set oPresentation = ActivePresentation ' Get the first slide in the presentation Dim oSlide As Slide Set oSlide = oPresentation.Slides(1) ' Get the first shape on the slide Dim oShape As Shape Set oShape = oSlide.Shapes(1) ' Nudge the shape to the right oShape.Left = oShape.Left + 1 ' Copy the whole slide oSlide.Copy ' Paste the slide as a new slide at position 2 Dim oNewSlides As SlideRange Set oNewSlides = oPresentation.Slides.Paste(2) ' Get a reference to the slide we pasted Dim oNewSlide As Slide Set oNewSlide = oNewSlides(1) ' Get the first shape on the NEW slide Dim oNewShape As Shape Set oNewShape = oNewSlide.Shapes(1) ' Nudge the shape to the right oNewShape.Left = oNewShape.Left + 1
Конечная Подлодка
Насколько я могу понять, чтобы реализовать этот код, у меня должно быть открыто активное окно, и в нем должна быть хотя бы одна фигура.Прежде чем я запущу этот код, у меня есть только один слайд;после запуска кода у меня есть два слайда:тот, что постарше, - номер 1, а тот, что поновее, - номер 2.
Если я запущу этот код еще раз, то в результате получу три слайда:самый старый из них по-прежнему находится под номером 1, но самый старый - под номером 2, а не под номером 3.
Мой вопрос в том, как я могу заставить его создавать слайды, чтобы более новые слайды всегда были с большим порядковым номером, т. е.каждый вновь созданный слайд должен быть последним на боковой панели предварительного просмотра слайдов (самым нижним)?
А также, как я могу превратить это в цикл?Так что мне не нужно повторно запускать этот код снова и снова, а просто создать цикл с заданным количеством итераций цикла.
Я предполагаю, что если это должен быть цикл, то индекс слайдов должен быть преобразован в переменную, но я не знаю, как это сделать в PowerPoint VBA.
Решение
Я не уверен, что ваш код имеет какой-либо смысл.Это по существу:
- Получает 1-й слайд
- Получает 1-ю форму на слайде
- Перемещает его на 1 единицу вправо
- Копирует 1 - й слайд
- Вставляет его в качестве 2-го слайда
- Приобретает 1-ю форму на новом 2-м слайде слайд
- Перемещает его на 1 единицу вправо
Почему он перемещает его дважды, один раз на оригинале и один раз на копии?
Независимо от того, чтобы ответить на ваши конкретные вопросы:
Чтобы вставить его в качестве последнего слайда, замените
Set oNewSlides = oPresentation.Slides.Paste(2)
С
Set oNewSlides = oPresentation.Slides.Paste() #no index pastes as last
Для зацикливания используйте что-то вроде этого:
Dim oPresentation As Presentation
Set oPresentation = ActivePresentation
Dim oSlide As Slide
Dim oSlides As SlideRange
Dim oShape As Shape
Dim slideNumber As Integer
For slideNumber = 1 To 10
Set oSlide = oPresentation.Slides(oPresentation.Slides.Count)
oSlide.Copy
Set oNewSlides = oPresentation.Slides.Paste()
Set oSlide = oNewSlides(1)
Set oShape = oSlide.Shapes(1)
oShape.Left = oShape.Left + 5
Next slideNumber
При этом берется последний слайд, копирует его, вставляет копию в качестве нового последнего, сдвигает первую фигуру вправо, берет новый последний слайд, копирует его, вставляет копию в качестве последнего, сдвигает первую фигуру вправо и т.д....Он проделает это 10 раз.