是否可以使用VBA跳转到特定的PowerPoint幻灯片?

时间:2011-01-27 16:02:22

标签: powerpoint powerpoint-vba

我一直试图在幻灯片上创建一个按钮,跳转到另一张名为的幻灯片。我希望能够执行类似activeslide.view.slide(“菜单幻灯片”)

的操作

这不起作用,但我认为应该这样......任何帮助都会很棒!

2 个答案:

答案 0 :(得分:6)

首先,您需要实际命名幻灯片。幻灯片的“.Name”属性与大纲中的名称不同,也未与其名称相关联。我只是这样说,因为很多人都没有意识到这一点。您必须通过VBA设置此属性。如果您不这样做,您可能会得到一些意想不到的结果。 PowerPoint将幻灯片命名为“幻灯片#​​”,因此如果您将幻灯片插入演示文稿的中间,则可以使用多个具有相同名称的幻灯片。如果您正在寻找一个专门命名的幻灯片并且没有重命名幻灯片,PowerPoint将返回它在您用于循环播放幻灯片集合的任何循环中找到的第一个“幻灯片#​​”。如果您编辑演示文稿并移动幻灯片,这可能会给您带来很多麻烦。我建议重命名你知道以后要链接到的任何幻灯片(或者编写一些循环遍历整个幻灯片集合并将每个幻灯片的“.Name”属性更改为其Title 1对象内容的内容)。

以下是一些重命名当前幻灯片的代码

Sub ChangeSlideName()

    Dim NewName As String
    Dim ActiveSlide As Slide

    Set ActiveSlide = ActiveWindow.View.Slide

    NewName = InputBox("Enter new slide name for slide " & _
              ActiveSlide.SlideIndex, "New Slide Name", ActiveSlide.Name)

    If NewName = "" Then

        Exit Sub

    End If

    ActiveSlide.Name = NewName

End Sub


下面是一些获取幻灯片索引号的代码。它就像另一个答案一样,只是更直接一点。

Function GetSlideIndex(SlideName As String)

    For Each Slide In ActivePresentation.Slides

        If Slide.Name = SlideName Then

            GetSlideIndex = Slide.SlideIndex
            Exit Function

        End If

    Next

End Function


这是实际将您发送到幻灯片的子

Sub MoveToSlide()

    SlideShowWindows(1).View.GotoSlide GetSlideIndex("YourSlideName")

End Sub

编辑添加:MoveToSlide子可以添加到任何对象的鼠标单击或鼠标悬停操作,而不仅仅是命令按钮。为此,请选择要使用的对象,然后转到插入 - >链接 - >操作并选择“运行宏”。

答案 1 :(得分:4)

试试这段代码

通过传递名称

来获取幻灯片索引的函数
Function GetSlideIndex(Slide As String) As Integer
    Dim retVal As Integer
    retVal = 0
    For i = 1 To ActivePresentation.Slides.Count
        If ActivePresentation.Slides(i).Name = Slide Then
            retVal = i
            Exit For
        End If
    Next
    GetSlideIndex = retVal
End Function

此处使用CommandButton导航到幻灯片

Private Sub CommandButton1_Click()
    SlideShowWindows(1).View.GotoSlide GetSlideIndex("Slide2"), 1
End Sub