Как переключаться между «активной бумагой» и «слайдами» в Power Point VBA - PullRequest
2 голосов
/ 09 ноября 2009

У меня есть простой вопрос относительно PowerPoint VBA:

Какой код VBA следует использовать для переключения между «активным листом бумаги» (извините, я не знаю, как правильно его назвать), в котором я что-то делаю с объектом (-ами), и файл (или «поле», опять же извините за мою плохую терминологию), где все слайды?

Например, если я хочу переместить выбранный объект в «активный лист бумаги», я бы использовал этот макрос:

ActiveWindow.Selection.ShapeRange.IncrementLeft 6 #

и если я хочу скопировать выбранный слайд в файл слайдов, я бы использовал этот код:

ActiveWindow.Selection.Copy ActiveWindow.View.Paste

Но как мне соединить эти две части скрипта? Допустим, я хочу переместить объект в «активный лист бумаги», затем скопировать весь этот «лист», затем создать его двойник в поле слайдов, а затем запрыгнуть в двойной лист бумаги, чтобы что-то сделать с объектами там?

Вкратце, как мне перейти с «бумаги» на «слайды» и обратно на «бумагу» в VBA?

(Опять же, я прошу прощения за ужасную терминологию здесь, я надеюсь, вы понимаете, что я имею в виду здесь.)

Спасибо всем заранее.

1 Ответ

2 голосов
/ 09 ноября 2009

Если вы запишите макрос в PowerPoint и изучите код, вы увидите, что он использует объект Selection практически для всего. Это иногда полезно (потому что это означает, что более вероятно, что код будет делать то, что вы хотите, если вы выберете другой объект), но для чего-то большего, чем очень короткий макрос, вероятно, лучше обратиться к объектам напрямую, как в следующем коде :

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

Обратите внимание, что почти каждый объект имеет метод Select, поэтому, если вы хотите явно что-то выбрать, вы можете. В некоторых случаях вам может понадобиться сначала изменить тип вида активного окна - например, вы не можете выбрать форму на слайде в режиме сортировки слайдов.

...