Применение форматирования шрифта к тексту PowerPoint программно

Я пытаюсь использовать VBA для вставки текста в PowerPoint TextRange, я использую что-то вроде этого:

ActiveWindow.Selection.SlideRange.Shapes("rec1").TextFrame.TextRange.Text = "Hi"

Однако я не могу понять, как применять полужирный шрифт, курсив и подчеркивание программно (я не вижу свойства .RichText или чего-то подобного).

У меня есть простой текст HTML с полужирным шрифтом, курсивом и подчеркнутым текстом, который я хотел бы преобразовать.

Как это сделать?


person OneNerd    schedule 08.06.2009    source источник
comment
Я думаю, что я рассмотрел все ваши проблемы в моем отредактированном ответе ниже.   -  person Matthew Jones    schedule 08.06.2009
comment
пытаясь понять, как заставить ваш пример работать в моем сценарии. Я думаю, что (Начало: = 2, Длина: = 3) отбрасывает VBScript, хотя, похоже, он работает в VBA (моя ошибка - нужно было указать, что я использовал VBScript). Похоже, это должно работать, хотя какая боль - я бы хотел, чтобы они реализовали лучший способ, чем этот. Опубликую, как только смогу заставить его работать по мере необходимости. Спасибо -   -  person OneNerd    schedule 08.06.2009
comment
Я изменил тег вашего сообщения, чтобы отразить, что вы используете VBScript. Интересно узнать, как вы решаете эту проблему.   -  person Matthew Jones    schedule 08.06.2009


Ответы (4)


Это легко сделать, используя объекты Characters, Words, Sentences, Runs и Paragraphs объекта TextRange, а затем объект 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
person Todd Main    schedule 04.02.2010

Попробуйте просмотреть документацию MSDN на объект TextRange. Он содержит примеры того, как получить доступ к свойствам Font объекта TextRange.

РЕДАКТИРОВАТЬ: вы можете получить программный доступ к таким вещам, как полужирный и курсив, следующим образом:

TextRange.Font.Bold = msoTrue

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Существует несколько методов, с помощью которых вы можете выбрать только определенный текст в текстовом диапазоне. См. следующее:

Согласно тому же из этой ссылки, вы можно выделить часть текста одним из этих способов и установить шрифт программно. Например:

Application.ActiveDocument.Pages(1).Shapes(2) _
.TextFrame.TextRange.Words(Start:=2, Length:=3) _
.Font.Bold = True

Этот пример был взят из ссылки Words Method.

person Matthew Jones    schedule 08.06.2009
comment
насколько я могу судить, это касается ВСЕГО текстового диапазона, а не отдельных слов внутри текстового диапазона. - person OneNerd; 08.06.2009

В дополнение к приведенному выше ответу вы должны попытаться назвать объекты, которые вы будете изменять, поскольку их выбор в середине презентации может привести к странному поведению PowerPoint. Создайте новый объект TextRange и установите его следующим образом.

dim mytextrange As TextRange
Set mytextrange = ActiveDocument.Pages(1).Shapes(2).TextFrame.TextRange
mytextrange.Words...
person Andrew Scagnelli    schedule 09.06.2009
comment
Да, я уже это делаю (облегчает работу с объектами). Спасибо - - person OneNerd; 09.06.2009

Вот как вы можете сделать это, чтобы изменить шрифт определенного текста:

Sub changeFont()

Dim oPresentation   As Presentation
Dim oSlide          As Slide
Dim oShape          As Shape
Dim stringSearched  As String    

stringSearched = "something"

'all opened presentations
For Each oPresentation In Presentations
    'all slide in them
    For Each oSlide In oPresentation.Slides
        'all shapes (anything)
        For Each oShape In oSlide.Shapes
            'only those that contain text
            If oShape.HasTextFrame Then
                If InStr(oShape.TextFrame.TextRange.Text, stringSearched) > 0 Then
                    'here you need to define where the text ends and start
                    oShape.TextFrame.TextRange.Characters(InStr(oShape.TextFrame.TextRange.Text, stringSearched), Len(stringSearched)).Font.Underline = msoTrue
                    oShape.TextFrame.TextRange.Characters(InStr(oShape.TextFrame.TextRange.Text, stringSearched), Len(stringSearched)).Font.Italic = msoFalse
                End If
            End If
        Next
    Next
Next
End Sub
person Rafiki    schedule 16.09.2019