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

时间:2015-03-18 05:57:52

标签: vba powerpoint powerpoint-vba powerpoint-2013

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

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

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

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

screenshot

来自一个有用的论坛成员的这段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

提前致谢,

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

我想添加另一个解决方案,而不使用VBA。它可能有点笨拙,但效果非常好。这个想法是进入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)。确保搜索也在子文件夹中执行。 See this screenshot.

第8步。现在,将文件再次压缩为zip文件。重要的是,选择完全之前提取的文件,其父文件夹。 (如果不小心在父文件夹的级别上进行压缩,则会在zip文件的文件夹层次结构中创建一个额外的层,这会使Powerpoint感到困惑。)

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

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