【问题标题】:Use VBA to change colors of slide elements in Powerpoint 2013在 Powerpoint 2013 中使用 VBA 更改幻灯片元素的颜色
【发布时间】:2015-03-18 05:57:51
【问题描述】:

我有一个 150 张幻灯片的演示文稿,由于公司品牌重塑工作,我想对其进行修改。我们之前的绿松石色已用于文本、线条、形状和形状填充。我想构建一个贯穿整个演示文稿的 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

提前致谢,

【问题讨论】:

  • 您需要替换所有内容,包括文本和形状?图片怎么样?我相信那些是图片?
  • 图像是白色轮廓图像/徽标,位于正常的 powerpoint 形状内,填充/轮廓为蓝色。这是我想改变的蓝色。圆圈和“辐条”也是我想要新颜色的普通幻灯片线。基本上,该屏幕截图上的所有蓝色都是我想要更改的。
  • 到目前为止您尝试了哪些操作,哪些操作不正常?不应该发生的事情,不应该发生的事情?并作为建议:考虑使用主题颜色而不是 RGB 编码颜色;那么以后你需要做的就是改变它们,PPT会自动重新着色分配给该主题颜色的任何东西。
  • 主题颜色的好主意,感谢您的提示。我将在答案中添加对我有用的 VBA 代码 - 感谢您的建议。

标签: vba powerpoint powerpoint-2013


【解决方案1】:

这应该让你更近一步,尽管我可能会将它重写为一个你可以将 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

【讨论】:

  • 感谢您的帮助。但是,脚本在以下行失败,抱怨“值超出或范围”: If .Line.Visible Then
  • 此时它正在处理什么样的形状?在“With oSh”之后添加“Debug.Print .Name”(不包括引号)。在运行代码之前,在 VBA IDE 中按 Ctrl+G 以显示立即窗口。 Debug.Print 结果将出现在那里。
  • 太棒了,这很有效,我发现罪魁祸首是“表 1”。我只是删除了我拥有的几张桌子,脚本就完成了。您是否也可以为所有“椭圆”、“矩形”和“图表”添加颜色替换?或者只是所有形状都可以?
  • 这应该已经适用于您从“插入形状”菜单添加的所有普通形状。图表是一个额外的复杂级别。可能但比我有时间处理的工作要多得多。但是为了防止其他问题,您可以添加一个案例选择器:选择案例 oSh.Type,然后让它忽略图表、媒体等类型的形状。您还想为 If oSh.HasChart 或 oSh.HasTable Then ' 跳过它,不要尝试重新着色
【解决方案2】:

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

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

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

第 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)。确保搜索也在子文件夹中执行。 See this screenshot.

第 8 步。 现在将文件再次压缩为 zip 文件。选择准确之前提取的文件很重要,没有它们的父文件夹。 (如果您不小心在父文件夹的级别上压缩,您将在 zip 文件的文件夹层次结构中创建一个额外的层,这会混淆 Powerpoint。)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多