首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Powerpoint 2013中使用VBA更改幻灯片元素的颜色

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

Stack Overflow用户
提问于 2015-03-18 13:57:52
回答 2查看 20.3K关注 0票数 8

我有一个150张幻灯片的powerpoint演示文稿,由于公司重塑品牌的努力,我想修改一下。我们以前的绿松石颜色已经用于文本,线条,形状和形状填充。我想构建一个VBA脚本,它运行在整个演示文稿中,并一举修改所有幻灯片,并用我们新的深灰色取代这个蓝色。

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

新的公司颜色是RGB(71,67,65) -深灰色

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

这段来自一位有帮助的论坛成员的VBA代码在形状填充方面工作得非常好-如果这段代码可以重新工作,包括任何文本和形状轮廓和线条,那就太完美了。

代码语言:javascript
运行
复制
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

提前谢谢你,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 23:00:57

这应该会让您更近一步,尽管我可能会将它重写为一个函数,您可以将lFindColor和lReplaceColor传递给它。

代码语言:javascript
运行
复制
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
票数 10
EN

Stack Overflow用户

发布于 2020-01-29 03:42:47

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

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

步骤2.如果演示文稿的扩展名为.ppt,请在Powerpoint中打开它,然后再次将其另存为.pptx

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

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

步骤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-)文件中执行查找和替换操作。选择正确的文件夹,搜索旧的颜色代码(00B0F0)并将其替换为新的颜色代码(474337)。确保搜索也在子文件夹中执行。See this screenshot.

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

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

警告:您在步骤7中搜索的十六进制颜色代码也可能显示为完全不同的内容(例如电话号码或其他任何内容)。如果你有可能这样搞砸你的演示文稿,那就搜索val="00B0F0",而不仅仅是00B0F0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29115072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档