更改 PowerPoint 演示文稿中文本段的颜色

Changing colour of text segments in a powerpoint presentation

我有一张 Powerpoint 幻灯片,其中以文本形状的形式粘贴了格式化的源代码。遗憾的是,该文本的某些部分在投影仪上的对比度很差,因此我想为具有不同颜色的特定字体更改每种颜色。在这个具体的例子中,我想替换橙色:

迭代所有形状并访问形状的整个文本不是问题,但我找不到任何 属性 允许我枚举样式文本段:

Sub ChangeSourceColours()
    For Each pptSlide In Application.ActivePresentation.Slides
        For Each pptShape In pptSlide.Shapes
            If (pptShape.Type = 1) And (pptShape.TextFrame.TextRange.Font.Name = "Consolas") Then
                ' Iterate over styled segments and change them if the previous colour is orangey
                MsgBox pptShape.TextFrame.TextRange
            End If
        Next
    Next
End Sub

TextRange2 属性 乍一看很有帮助,但查看调试器中的变量时,我看不到任何看起来像一系列格式化段的东西。我希望在 HTML 中找到类似 <span> 的东西来检查并可能更改颜色。

textFrame2.textRange.Font对全文有效。如果要访问单个字符及其各自的格式,则需要访问 textRange.Characters.

以下例程将具有特定颜色的所有字符的文本颜色更改为新颜色:

Sub ChangeTextColor(sh As Shape, fromColor As Long, toColor As Long)
    Dim i As Long
    With sh.TextFrame2.TextRange
        For i = 1 To .Characters.Length
            If .Characters(i).Font.Fill.ForeColor.RGB = fromColor Then
                .Characters(i).Font.Fill.ForeColor.RGB = toColor
            End If
        Next i
    End With
End Sub

您可以使用

从您的代码中调用它
Dim pptSlide as Slide
For Each pptSlide In Application.ActivePresentation.Slides
    Dim pptShape As Shape
    For Each pptShape In pptSlide.Shapes
        If (pptShape.Type = 1) And (pptShape.TextFrame.TextRange.Font.Name = "Consolas") Then
            ChangeTextColor pptShape, RGB(255, 192, 0), vbRed
        End If
    Next
Next

您必须将 RGB-Code 调整为您正在使用的橙色,或者不使用 RGB,您可以使用 ObjectThemeColor。为避免类型不匹配,您需要将 pptShape 变量声明为 Shape - 您应该声明所有变量并无论如何使用 Option Explicit

请注意,您也可以在 Excel 中(也可能在 Word 中)使用 ChangeTextColor 例程。形状在 Excel 和 Powerpoint 中的定义相似。 Excel 的优点:您可以使用宏录制器来了解如何在 Office VBA.

中使用 Shape