Как да направя цикъл в 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

End Sub

Доколкото мога да разбера, за да внедря този код, трябва да имам отворен активен прозорец и той трябва да има поне една форма в него. Преди да стартирам този код, имам само един слайд; след като кодът е изпълнен, имам два слайда: по-старият е номер 1, а по-новият е номер 2.

Ако стартирам този код още веднъж, ще получа три слайда като резултат: най-старият все още е номер 1, но най-старият е номер 2, а не номер 3.

Въпросът ми е как мога да го накарам да произвежда слайдове, така че по-новите слайдове винаги да са тези с по-голям пореден номер, т.е. всеки новосъздаден слайд трябва да е последният в страничната лента за преглед на слайдове (най-долният)?

И също така, как мога да го превърна в цикъл? Така че не е необходимо да изпълнявам този код отново и отново, а просто да направя цикъл с даден брой повторения на цикъла.

Предполагам, че ако трябва да е цикъл, тогава индексът на слайдовете трябва да се превърне в променлива, но не знам как да го направя в PowerPoint VBA.


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


Отговори (1)


Не съм сигурен, че вашият код има смисъл. По същество това:

  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 пъти.

person Mark    schedule 10.11.2009
comment
Благодаря ти, Марк. Точно каквото исках. - person brilliant; 11.11.2009