如何删除 VBA powerpoint 中的部分文本框文本?

How to remove part of textbox text in VBA powerpoint?

我有一个 powerpoint 演示文稿,每张幻灯片的 1 个文本框中有白色和黄色文本的字幕(白色在上,黄色在后)。我想用白点(“.”)替换白色文本。我是否需要制作一个变量并使其计算白色字符并从前面删除?

到目前为止,这是我的脚本:

Sub RemoveWhiteText()

    Dim oSl As Slide
    Dim oSh As Shape


    With ActivePresentation

For Each oSl In .Slides
    For Each oSh In oSl.Shapes
        With oSh
            If .HasTextFrame Then
                If .TextFrame.HasText Then
                    If TextRange.Font.Color = vbWhite Then
                        oSh.TextFrame.Text
                    End If
                End If
            End If
        End With
    Next
Next

    End With
End Sub

请阅读我对问题的评论。我建议在那里循环遍历字符集合,直到字体颜色为白色。

试试这个:

Sub RemoveWhiteText()

Dim oSl As Slide, oSh As Shape, oTr As TextRange, i As Long

For Each oSl In ActivePresentation.Slides
    For Each oSh In oSl.Shapes
        If oSh.HasTextFrame Then
            If oSh.TextFrame.HasText Then
                Set oTr = oSh.TextFrame.TextRange
                i = 1
                Do While oTr.Characters(1, i).Font.Color = vbWhite
                    i = i + 1
                Loop
                'MsgBox oTr.Characters(1, i - 1).Text
                If i > 1 Then oTr.Characters(1, i - 1).Text = "."
                Set oTr = Nothing
            End If
        End If
    Next
Next

End Sub

每个不同格式的文本块都是一个 运行。在您的例子中,第一个 运行 的字体颜色为白色。您可以使用该信息 运行 一个循环,如下所示:

Sub StripLeadingWhiteText()
Dim sld As Slide
Dim shp As Shape
Dim rn As TextRange2

For Each sld In ActivePresentation.Slides
    For Each shp In sld.Shapes
        If shp.HasTextFrame Then
           If shp.TextFrame2.HasText Then
                Set rn = shp.TextFrame2.TextRange.Runs(1)
                If rn.Font.Fill.ForeColor.RGB = vbWhite Then
                    rn.Text = "."
                End If
            End If
        End If
    Next
Next

End Sub`