【问题标题】:Powerpoint VBA - Allow users to change colors for all shapes with similar shape namePowerpoint VBA - 允许用户更改具有相似形状名称的所有形状的颜色
【发布时间】:2023-04-10 01:43:01
【问题描述】:

我正在创建一个 PowerPoint 模板,允许用户从第一张幻灯片开始编辑整个幻灯片。

我允许用户选择徽标、输入文本和选择幻灯片部分。一旦他们推送更新,它将更新整个套牌。

接下来我要做的是允许用户输入主要颜色和次要颜色(RGB 值)。一旦他们按下按钮,我希望甲板将所有形状的颜色更改为主要颜色或次要颜色。我试图用形状的名称来做到这一点。如果名称中包含“_main”或“_secondary”,有没有办法遍历所有形状并更改形状的颜色?

我不确定这是否是正确的做法,所以我愿意接受其他建议。

感谢您的帮助。

【问题讨论】:

  • 你不是在stackoverflow.com/questions/57776654/…解决了这个问题吗?
  • 我同意@egerz 最后一段:这应该通过将主题颜色应用于形状,然后更改主题以更改形状颜色来完成。

标签: vba dynamic colors powerpoint shapes


【解决方案1】:

这将满足您的要求:

Public Sub ReplaceColorByName(shapeNameContains As String, rgbColor As Long)

    Dim oSld As Slide
    Dim oShp As Shape

    For Each oSld In ActivePresentation.Slides
        If oSld.SlideIndex <> 1 Then
            For Each oShp In oSld.Shapes
                If InStr(1, oShp.Name, shapeNameContains, vbTextCompare) <> 0 Then
                    oShp.Fill.ForeColor.RGB = rgbColor
                End If
            Next
        End If
    Next

End Sub


Public Sub Test01()
    ReplaceColorByName "_main", RGB(0, 255, 0)
    ReplaceColorByName "_secondary", RGB(0, 0, 255)
End Sub

因此,代替那个 Test sub,您只需从第一张幻灯片中获取 RGB 值,然后传递这些值,而不是我在上面键入的纯绿色和蓝色。

但是根据您的用户与 PPT 的交互方式,使用图层名称可能不是处理这种全局重新着色任务的最佳方式。比如,如果/当他们创建一个新形状时会发生什么?新形状将获得一个随机名称,如“Oval 7”,大多数用户甚至不知道选择窗格的存在——让他们手动将“Oval 7”重命名为“Oval 7_main”可能要求太多。

根据我的经验,将所有形状的填充与主题颜色相关联,并根据需要更改主题颜色,是强制用户使用正确颜色的最佳方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多