9

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

旧的公司颜色是 RGB(0, 176, 240) - turquoise

新的企业颜色是 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

提前致谢,

4

2 回答 2

11

这应该让您更近一步,尽管我可能会将其重写为您可以将 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
于 2015-03-19T15:00:57.430 回答
1

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

第1 步。创建原始 Powerpoint 文件的备份!

第 2 步。如果您的演示文稿具有扩展名.ppt,请在 Powerpoint 中将其打开并再次另存为.pptx

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

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

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

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

步骤 7.在 Notepad++ 中单击“搜索>>在文件中查找...”。这允许您一次在所有提取的 (xml-) 文件中执行查找和替换操作。选择正确的文件夹,搜索旧颜色代码 (00B0F0) 并将其替换为新颜色代码 (474337)。确保搜索也在子文件夹中执行。请参阅此屏幕截图。

第8 步。现在再次将文件压缩成一个 zip 文件。请务必准确选择之前提取的文件,而不选择其父文件夹。(如果您不小心在父文件夹的级别上压缩,您将在 zip 文件的文件夹层次结构中创建一个额外的层,这会混淆 Powerpoint。)

步骤 9.将新创建的 zip 文件的扩展名更改为.pttx(并忽略 Windows 的任何警告)。

警告:您在 STEP 7 中搜索的十六进制颜色代码也很有可能显示为完全不同的内容(例如电话号码或其他)。如果您有可能以这种方式弄乱您的演示文稿,请搜索val="00B0F0"而不仅仅是00B0F0

于 2020-01-28T19:42:46.713 回答