Как сделать цикл в PowerPoint VBA?

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

Подтест()

' 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.


person brilliant    schedule 10.11.2009    source источник


Ответы (1)


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

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

person Mark    schedule 10.11.2009
comment
Спасибо, Марк. Именно то, что я хотел. - person brilliant; 11.11.2009