PPT = Использование названий разделов - PullRequest
0 голосов
/ 28 декабря 2018

Есть ли способ отобразить название раздела в текстовом поле на (каждом) слайде, чтобы об этом можно было сообщить зрителю?как показано в: https://answers.microsoft.com/en-us/msoffice/forum/all/ppt-using-section-names-in-footer/2b844798-2afa-4216-9ba5-5d066ac4dcca Но я не могу использовать нижний колонтитул, поскольку он уже используется в другом месте.

Редактировать: @ Стив Риндсберг - Большое спасибо за ваш ответ.
(Извините заошибки. Я новичок в VBA (с двух недель - но много часов ...).
Вот мой код: Во-первых, я попробовал следующее:
Я добавил текстовое поле в качестве заполнителя для SlideMaster.CustomLayout стекст «Раздел #».

Sub AddTextboxToSlidemaster()
Dim shp As Shape
On Error Resume Next
Set shp = Application.ActivePresentation.Designs(1).SlideMaster.CustomLayouts(1).Shapes.AddPlaceholder(ppPlaceholderObject,  _
Left:=223.75, Top:=9#, Width:=453.62, Height:=12.18898)
With shp
    shp.Tags.Add "TEXT", "Section#"  'this seems to be unnecessary
       With .TextFrame
            .TextRange.Text = "Section#"
       With .TextRange
                .Font.Size = 12
                .Font.name = "Verdana"
                .Font.Color.RGB = RGB(7, 37, 62)
                .ParagraphFormat.Bullet = msoFalse
           End With
       End With
    End With
End Sub  

Затем я скопировал этот заполнитель / текстовое поле в несколько соответствующих пользовательских макетов. Затем я добавил несколько слайдов с одним из этих пользовательских макетов (в слайд-просмотр). Итак, у меня есть этот заполнитель/ textbox на некоторых слайдах.

Следующий шаг: я ищу текст "Section #" на всех слайдах и помечаю эти заполнители тегом "TEXT", Value "Section #":

Sub FindTextSelectionAndTag()
For Each sld In Application.ActivePresentation.Slides
    For Each shp In sld.Shapes
        If shp.HasTextFrame Then
            Set txtRng = shp.TextFrame.TextRange
            Set foundText = txtRng.Find(FindWhat:="Section#")
            Do While Not (foundText Is Nothing)
                With foundText
                shp.Tags.Add "TEXT", "Section#"
        Set foundText = _
                        txtRng.Find(FindWhat:="Section#", _
                        After:=.Start + .Length - 1)
              End With
            Loop
        End If
    Next
Next
End Sub 

Но метки-заполнители на слайдах не принимают этот тег.

Поэтому вместо этого я установил текстовое поле с текстом «Раздел #» непосредственно на некоторые соответствующие слайды - как вы предложили - и затем язапустите макрос, чтобы пометитьtextbox:
«Sub FindTextSelectionAndTag ()», как описано выше.

Наконец, я создаю этот макрос, который переносит текущий раздел в текстовое поле с категориями / тегами.

Sub AbschnittHeader()
  Dim sld As Slide
  Dim shp As Shape
  Dim b_found As Boolean
    If ActivePresentation.SectionProperties.Count > 0 Then
      For Each sld In ActivePresentation.Slides
      For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
  shp.TextFrame.TextRange = 
 ActivePresentation.SectionProperties.name(sld.sectionIndex)
     Next shp
   Next sld
 End If
End Sub

Это работает до сих пор.

Я бы попросил возможные оптимизации в этом коде - и у меня есть вопрос, что не так с добавлением заполнителя в Masterslide.customlayout.Есть ли способ сделать эту работу - потому что я думаю, что этот способ будет более удобным.Или это невозможно для этой цели.

Я также хотел бы добавить имя файла PowerPoint (ActivePresentation) дополнительно к разделу в текстовом поле следующим образом (но я не знаю, как):

Имя файла powerpoint |sld.sectionIndex

Например (имя файла pptFile: Marketing):
Marketing |Глава 1 Введение
Маркетинг |Глава 2 ...

Я ценю ваш совет.

1 Ответ

0 голосов
/ 05 января 2019

Большое спасибо.Теперь это мое окончательное решение, которое работает:
Сначала Sub Sub AddTextboxToSlides (), как описано в моем вопросе - но не для мастера, а для нескольких слайдов - а затем необязательно Sub AbschnittHeader () со следующими строками:

а.В комплекте с именем файла

For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
    shp.TextFrame.TextRange = ActivePresentation.FullName _
    & " | " & ActivePresentation.SectionProperties.name(sld.sectionIndex)

б.или включены в заголовок файла с первого слайда :-)

For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
    shp.TextFrame.TextRange = _
    ActivePresentation.Slides(1).Shapes.Title.TextFrame.TextRange.Text _
    & " | " & ActivePresentation.SectionProperties.name(sld.sectionIndex)
...