Как использовать переменную для именования слайда Powerpoint с помощью VBA, а не буквальной строки

Я пытаюсь создать новый слайд и одновременно назвать его с помощью VBA. У меня есть страница главного меню, содержащая фигуры с текстовыми метками. Я установил действие для каждой фигуры для запуска следующего макроса: Он предназначен для создания нового слайда и его имени, совпадающего с именем категории, которое отображается в тексте на кнопке, которую нажал пользователь.

Sub ChangeSlideName(objCurrentShape As Shape) ' Place the clicked on shape in a variable.

    Dim objTextInBox As String
    Dim objCurrentSlideNum As Integer
    
' Place current slide number into a variable.
    objCurrentSlideNum = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
    
' Set value of string variable to the text in the shape clicked on.
    objTextInBox = ActivePresentation.Slides(objCurrentSlideNum).Shapes(objCurrentShape.Name).TextFrame.TextRange.Text
    
' Create a new slide at the end of the presentation.
    Set pptNewSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, ppLayoutBlank)
    
' Make the new slide the active slide.
    ActivePresentation.SlideShowWindow.View.Last
    
' Set the name of the new slide to the text contained on the button clicked.
    ActiveWindow.View.Slide.Name = objTextInBox
    
End Sub

Мой код запускается и переводит меня на только что созданный слайд; однако я не знаю, как определить, действительно ли он назвал новый слайд. Поскольку я использую переменную для названия слайда, я подозреваю, что это не работает. Когда я запускаю другой макрос с другого слайда, он не перенаправляет меня на слайд, который я переименовал. Я также использую переменную для определения имени слайда, на который я пытаюсь перейти. Я пробовал все 4 из следующих команд по одной.

' Take user to the page of the category clicked on.
    SlideShowWindows(1).View.GotoSlide GetSlideIndex(objTextInBox)
    
    ActivePresentation.SlideShowWindow.View.GotoSlide (objTextInBox)
    
    SlideShowWindows(1).View.GotoSlide GetSlideIndex(objTextInBox), 1
    
    ActivePresentation.Slides(objTextInBox).Select

Я что-то упустил в своем коде, например, круглые скобки, кавычки или что-то в этом роде? Могу ли я не использовать переменную вместо буквальной строки, такой как имя нового слайда? Кроме того, может ли кто-нибудь сказать мне, как проверить имя слайда?


person NoWhizKid    schedule 08.10.2020    source источник
comment
Это VBA, другой язык, чем VBScript. Вы должны изменить форму тега VBS на VBA.   -  person Rno    schedule 09.10.2020


Ответы (1)


Эти работы для Powerpoint-2010. В другой версии не пробовал. Когда пользователь нажимает на фигуру (в моем случае это прямоугольник с текстом внутри, который показывает название категории), этот код создаст новый слайд и назовет его любым именем категории, которое было в фигуре, на которую нажали.

Sub ChangeSlideName(objClickedShape As Shape) ' Place the clicked on shape in a variable.

    Dim objText As String
    Dim objSlideNum As Integer
    Dim pptNewSlide

    
' Place current slide number into a variable.
    objSlideNum = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
    
' Set value of string variable to the text in the shape clicked on.
    objText = ActivePresentation.Slides(objSlideNum).Shapes(objClickedShape.Name).TextFrame.TextRange.Text
    
' Create a new slide at the end of the presentation.
    Set pptNewSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, ppLayoutBlank)
    
' Make the new slide the active slide.
    ActivePresentation.SlideShowWindow.View.Last
    
' Change slide # variable to the number of the newly created slide.
    objSlideNum = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
    
' Set the name of the new slide to the text contained on the button clicked.
    ActivePresentation.Slides(objSlideNum).Name = objText
 
End Sub

Это команда, которая перейдет к вновь созданному слайду с помощью переменной:

    Dim osld As Slide
    Set osld = ActivePresentation.Slides(objTextInBox)
    SlideShowWindows(1).View.GotoSlide (osld.SlideIndex)

Это позволяет мне использовать один макрос для перехода между слайдами, используя названия слайдов в качестве текста, написанного в фигурах в презентации.

person NoWhizKid    schedule 11.10.2020