如何在Power Point VBA中切换“活动纸张”和“幻灯片”

时间:2009-11-09 12:35:14

标签: vba powerpoint powerpoint-vba

我有一个关于PowerPoint VBA的简单问题:

我应该使用哪个VBA代码在“活动纸张”之间切换(对不起,我不知道如何正确命名),其中我正在使用对象进行操作,以及所有幻灯片的文件(或“字段”,再次对不起我的不良术语)?

例如,如果我想在“活动纸张”中移动选定的对象,我会使用此宏:

  

ActiveWindow.Selection.ShapeRange.IncrementLeft   6#

如果我想在幻灯片文件中复制选定的幻灯片,我会使用以下代码:

  

ActiveWindow.Selection.Copy   ActiveWindow.View.Paste

但是如何连接这两个脚本呢?假设我想在“活动纸张”中移动一个对象,然后复制整个“工作表”,然后在幻灯片字段中创建它的双胞胎,然后跳进双张纸,用那里的对象做一些事情?

很快,如何在VBA中从“纸张”切换到“幻灯片”并返回“纸张”?

(再次,我很抱歉这里有可怕的术语,我希望你能理解我的意思。)

提前谢谢大家。

1 个答案:

答案 0 :(得分:2)

如果您在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方法,所以如果你想明确选择某些东西,你可以。在某些情况下,您可能需要首先更改活动窗口的视图类型 - 例如,在幻灯片分类视图中,您无法在幻灯片上选择形状。