Есть ли способ отобразить название раздела в текстовом поле на (каждом) слайде, чтобы об этом можно было сообщить зрителю?как показано в: 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 ...
Я ценю ваш совет.