Как сделать цикл в PowerPoint VBA? - PullRequest
3 голосов
/ 10 ноября 2009

Насколько я знаю, приведенный ниже код получает форму из активного окна, слегка подталкивает ее, копирует слайд и вставляет его сразу после текущего, затем превращает вставленный слайд в активное окно и подталкивает его еще раз:

Sub Test ()

' 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

End Sub

Насколько я понимаю, для реализации этого кода у меня должно быть открыто активное окно, и в нем должна быть хотя бы одна фигура. До запуска этого кода у меня есть только один слайд; после запуска кода у меня есть два слайда: старый номер 1, а новый номер 2.

Если я выполню этот код еще раз, в результате я получу три слайда: самый старый - номер 1, а самый старый - номер 2, а не номер 3.

Мой вопрос заключается в том, как заставить его создавать слайды, чтобы новые слайды всегда были с большим порядковым номером, т. Е. Каждый вновь созданный слайд должен быть последним на боковой панели предварительного просмотра слайдов (самой нижней)?

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

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

1 Ответ

4 голосов
/ 10 ноября 2009

Я не уверен, что ваш код имеет какой-либо смысл. Это по сути:

  1. Получает 1-й слайд
  2. Получает первую фигуру на слайде
  3. Перемещает его на 1 единицу вправо
  4. Копирует первый слайд
  5. Вставляет как второй слайд
  6. Получает 1-ую фигуру на новой 2-й слайд
  7. Перемещает его на 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 раз.

...