Программное применение форматирования шрифта к тексту PowerPoint
-
12-09-2019 - |
Вопрос
Я пытаюсь использовать VBA, чтобы вставить текст в PowerPoint. TextRange
, я использую что-то вроде этого:
ActiveWindow.Selection.SlideRange.Shapes("rec1").TextFrame.TextRange.Text = "Hi"
Однако я не могу понять, как программно применять жирный шрифт, курсив и подчеркивание (я не вижу свойства .RichText или чего-то подобного).
У меня есть простой текст HTML с жирным, курсивом и подчеркнутым текстом, который я хотел бы преобразовать.
Как это сделать?
Решение
Это легко осуществить с помощью TextRange
's Characters
, Words
, Sentences
, Runs
и Paragraphs
объекты, а затем это Font
объект для установки жирного шрифта, подчеркивания и курсива (среди других свойств).Например:
Sub setTextDetails()
Dim tr As TextRange
Set tr = ActiveWindow.Selection.SlideRange.Shapes(1).TextFrame.TextRange
With tr
.Text = "Hi There Buddy!"
.Words(1).Font.Bold = msoTrue
.Runs(1).Font.Italic = msoTrue
.Paragraphs(1).Font.Underline = msoTrue
End With
End Sub
Другие советы
Попробуйте посмотреть документация MSDN на Объект TextRange.Он содержит примеры доступа к свойствам Font объекта TextRange.
РЕДАКТИРОВАТЬ:Вы можете программно получить доступ к таким вещам, как Bold и Italics, следующим образом:
TextRange.Font.Bold = msoTrue
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ:Существует несколько методов, с помощью которых можно выделить только определенный текст в текстовом диапазоне.См. следующее:
Согласно тому же из эта ссылка, вы можете выделить часть текста одним из этих способов и установить шрифт программно.Например:
Application.ActiveDocument.Pages(1).Shapes(2) _
.TextFrame.TextRange.Words(Start:=2, Length:=3) _
.Font.Bold = True
Этот пример был взят из ссылки «Метод слов».
В дополнение к приведенному выше ответу вам следует попытаться дать имена объектам, которые вы будете изменять, поскольку их выбор в середине презентации может привести к странному поведению PowerPoint.Создайте новый объект TextRange и установите его следующим образом.
dim mytextrange As TextRange
Set mytextrange = ActiveDocument.Pages(1).Shapes(2).TextFrame.TextRange
mytextrange.Words...