更改 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
我有一张 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