Код VBA для придания слайдам постоянного имени - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь сократить усилия, необходимые для поддержания определенного слайда (давайте назовем его SlideXYZ) в актуальном состоянии. SlideXYZ - это важный слайд контента, который можно найти в нескольких колодах слайдов. Я изначально создал объекты слайдов, которые обновляются автоматически при внесении изменений в «исходный слайд». Однако, к сожалению, объекты слайдов не содержат анимации (это просто снимок реального слайда). Сейчас я пытаюсь написать сценарий VBA, который будет искать и заменять SlideXYZ в каждой колоде более новой версией SlideXYZ. Однако номер слайда является динамическим (он изменяется при добавлении нового слайда выше). Мне нужна статическая постоянная ссылка на SlideXYZ.

Я подумал о том, чтобы скопировать SlideXYZ во все презентации один раз, а затем использовать свойство Slide.Name, чтобы найти все его экземпляры, когда потребуется обновление.

Однако, похоже, что Slide.Name переназначается powerpoint каждый раз, когда слайд вставляется в новую презентацию. Мне нужна ссылка, которая не изменится, чтобы я мог найти и заменить SlideXYZ.

Ответы [ 2 ]

3 голосов
/ 30 мая 2019

@ Предложение Асгера сработает, но более последовательный подход (ИМО) будет использовать теги. Любая презентация, слайд или фигура на слайде могут иметь один или несколько фрагментов текста, прикрепленных в виде тега.

Например:

ActivePresentation.Slides(1).Tags.Add "SlideIdentifier", "Bob"

создаст тег с именем SlideIdentifier со значением Bob на слайде № 1 в текущей презентации. Эти теги будут перемещаться вместе со слайдом, куда бы он ни шел.

На этой странице часто задаваемых вопросов по PowerPoint есть дополнительная информация об использовании тегов:

http://www.pptfaq.com/FAQ00815_Working_with_Tags_-and_a_bit_about_Functions-.htm

0 голосов
/ 30 мая 2019

Как вы уже узнали: ни SlideIndex, SlideNumber, SlideID, ни Name нельзя использовать для идентификации скопированного слайда.

Вы можете работать с «альтернативным текстом» характерной формы, чтобы идентифицировать слайд:
Просто щелкните правой кнопкой мыши по фигуре и отредактируйте ее альтернативный текст.

Также заметки к слайдуможет помочь идентифицировать слайд.

После этого выводит некоторую информацию о слайде в окно отладки:

Private Sub IdentifyMySlide()
    Dim myslide As PowerPoint.Slide
    For Each myslide In ActivePresentation.Slides
        Debug.Print "Index: " & myslide.SlideIndex,
        Debug.Print "Number: " & myslide.SlideNumber,
        Debug.Print "ID: " & myslide.SlideID,
        Debug.Print "Name: " & myslide.Name,

        If myslide.Shapes.Count > 0 Then
            Debug.Print "Alternative ShapeText: " & myslide.Shapes(1).AlternativeText,
        End If

        If myslide.HasNotesPage Then
            If myslide.NotesPage(1).Shapes.Count > 0 Then
                If myslide.NotesPage(1).Shapes(1).HasTextFrame Then
                    Debug.Print "Notes: " & Left(myslide.NotesPage(1).Shapes(1).TextFrame.TextRange.Text, 10)
                Else
                    Debug.Print
                End If
            Else
                Debug.Print
            End If
        Else
            Debug.Print
        End If

    Next myslide
End Sub
...