Можно ли перейти на определенный слайд PowerPoint с помощью VBA? - PullRequest
5 голосов
/ 27 января 2011

Я пытался создать кнопку на слайде, которая переходит на другой слайд с именем. Я хочу иметь возможность сделать что-то вроде activeslide.view.slide ("Слайд меню")

Это не работает, но я думаю, что-то подобное должно ... Любая помощь была бы великолепна!

Ответы [ 2 ]

6 голосов
/ 08 апреля 2014

Во-первых, вам нужно будет назвать ваши слайды. Свойство слайда ".Name" отличается от его имени в контуре и не связано с ним. Я говорю это только потому, что многие люди не осознают этого. Вы должны установить это свойство через VBA. Если вы этого не сделаете, вы можете получить неожиданные результаты. PowerPoint назовет ваш слайд «Slide #», где бы он ни был вставлен, поэтому, если вы вставите слайд в середину презентации, вы можете иметь несколько слайдов с одинаковым именем. Если вы ищете слайд с определенным именем и не переименовали свои слайды, 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

Изменить, чтобы добавить: Sub MoveToSlide можно добавить к щелчку мышью или мыши над действиями для любого объекта, а не только для командных кнопок. Для этого выберите объект, который вы хотите использовать, и выберите Вставить -> Ссылки -> Действие и выберите Запустить макрос.

4 голосов
/ 28 января 2011

попробуйте этот код

функцию для получения индекса слайда, передавая имя

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
...