在 Powerpoint 2013 中使用 VBA 更改幻灯片元素的颜色

Use VBA to change colors of slide elements in Powerpoint 2013

我有一个 150 张幻灯片的 powerpoint 演示文稿,由于公司的品牌重塑工作,我想对其进行修改。我们之前的绿松石色已用于文本、线条、形状和形状填充。我想构建一个贯穿整个演示文稿的 VBA 脚本,并一次性修改所有幻灯片并将这种蓝色替换为我们新的深灰色。

旧的公司颜色是 RGB(0, 176, 240) - 绿松石色

新的企业颜色为 RGB(71, 67, 65) - 深灰色

我在互联网上尝试了多种不同的 vba,但无法正常工作。这是旧颜色的典型幻灯片的屏幕截图 - 所有蓝色项目都应更改为深灰色:

这段 VBA 来自一位有用的论坛成员的代码对于形状填充非常有效 - 如果可以重新处理以包含任何文本和形状轮廓和线条,那就太完美了。

Sub ChangeShapeColor()

    Dim oSh As Shape
    Dim oSl As Slide

    ' Look at each slide in the current presentation:
    For Each oSl In ActivePresentation.Slides

        ' Look at each shape on each slide:
        For Each oSh In oSl.Shapes

            ' IF the shape's .Fill.ForeColor.RGB = turqoise color:
            If oSh.Fill.ForeColor.RGB = RGB(0, 176, 240) Then

                ' Change it to corporate dark grey:
            oSh.Fill.ForeColor.RGB = RGB(71, 67, 65)

            End If

        Next oSh

    Next oSl

End Sub

提前致谢,

这应该让您更进一步,但我可能会将其重写为您可以将 lFindColor 和 lReplaceColor 传递给的函数。

Sub ReplaceColors()

    Dim lFindColor As Long
    Dim lReplaceColor As Long
    Dim oSl As Slide
    Dim oSh As Shape
    Dim x As Long

    lFindColor = RGB(255, 128, 128)
    lReplaceColor = RGB(128, 128, 255)

    For Each oSl In ActivePresentation.Slides
        For Each oSh In oSl.Shapes
            With oSh

                ' Fill
                If .Fill.ForeColor.RGB = lFindColor Then
                    .Fill.ForeColor.RGB = lReplaceColor
                End If

                ' Line
                If .Line.Visible Then
                    If .Line.ForeColor.RGB = lFindColor Then
                        .Line.ForeColor.RGB = lReplaceColor
                    End If
                End If

                ' Text
                If .HasTextFrame Then
                    If .TextFrame.HasText Then
                        For x = 1 To .TextFrame.TextRange.Runs.Count
                            If .TextFrame.TextRange.Runs(x).Font.Color.RGB = lFindColor Then
                                .TextFrame.TextRange.Runs(x).Font.Color.RGB = lReplaceColor
                            End If
                        Next
                    End If
                End If
            End With
        Next
    Next

End Sub

我想添加另一个解决方案,而不是使用 VBA。它可能有点 hacky,但效果非常好。这个想法是进入 pptx 文件并对颜色代码执行查找和替换操作。这将替换整个演示文稿中出现的 所有 种特定颜色(无论是普通文本、阴影、图形的一部分、table 的边框,随便你怎么说)。

步骤 1. 创建原始 Powerpoint 文件的备份!

步骤 2. 如果您的演示文稿的扩展名为 .ppt,请在 Powerpoint 中打开它并再次保存为 [=38= .pptx.

步骤 3. 将扩展名 .pptx 更改为 .zip(并忽略任何Windows 的警告)。例如,将 "my_presentation.pptx" 更改为 "my_presentation.zip"。原因是 pptx 文件实际上是一个 zip 文件。通过将文件重命名为 .zip,您将能够解压它。

步骤 4. 提取 zip 文件。您将获得一个包含大量 xml 文件(可能还有其他文件)的文件夹(和子文件夹)。在这些 xml 文件中的某处必须有颜色定义,尽管我们不知道确切位置。

STEP 5. 确定新旧颜色的十六进制代码。例如,如果旧颜色是绿松石色 (rgb: 0,176,240),则其十六进制代码将为 00B0F0。如果新颜色是深灰色(rgb: 71,67,55),它的十六进制代码就是474337.

第 6 步。 下载、安装并打开(免费)文本编辑器 Notepad++。 (您可以在这里找到它:https://notepad-plus-plus.org/。)

步骤 7. 在 Notepad++ 中单击 "Search >> Find in Files ..."。这允许您一次在所有提取的 (xml-) 文件中执行查找和替换操作。 Select 正确的文件夹,搜索旧颜色代码 (00B0F0) 并将其替换为新颜色代码 (474337)。确保也在子文件夹中执行搜索。 See this screenshot.

第 8 步。 现在再次将文件压缩成一个 zip 文件。重要的是,您 select 完全 以前提取的文件, 没有 它们的父文件夹。 (如果您不小心在父文件夹级别进行压缩,您将在 zip 文件的文件夹层次结构中创建一个额外的层,这将混淆 Powerpoint。)

STEP 9. 将新创建的 zip 文件的扩展名更改为 .pttx(并忽略 Windows).

警告:您在 STEP 7 中搜索的十六进制颜色代码也有可能显示为完全不同的东西(比如 phone数字或其他)。如果您有任何机会以这种方式弄乱您的演示文稿,请搜索 val="00B0F0" 而不仅仅是 00B0F0.