Вопрос

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

Дополнительный тест()

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top