PowerPoint VBA 添加形状事件/添加带有标签值的形状

PowerPoint VBA add shape event/ add shape with tag value

我目前正在尝试使用 VBA 向 PowerPoint 添加一个小功能,我的目标是创建一个类似于 Photoshop 图形层的小工具。

我的计划是在用户绘制的每个形状上添加一个图层名称标签,这样以后我可以循环解析每个项目并根据它预制 lock/unlock、show/hide 个形状标记值,如:

Sub add_shape_with_layer_tag()
    Set islide = ActivePresentation.Slides(1)
    Set ishape = islide.Shapes.AddShape(msoShapeRectangle, 5, 5, 80, 60)
    ishape.Tags.Add "Layer", "1"
End Sub

Sub show_hide_layer_one_shapes()
        Dim active_slide As Slide
        Set active_slide = ActiveWindow.View.Slide
        For Each ishape In active_slide.Shapes
            If ishape.Tags("Layer") = "1" Then
                ishape.Visible = Not (ishape.Visible)
            End If
        Next ishape
End Sub

但是我没有找到实现的方法,所以想请问有没有提供以下功能的方法?

  1. 覆盖添加形状函数,这样我就可以在每次用户绘制形状时将标签值潜入到形状中

  2. 捕捉添加形状事件(如果这个东西确实存在)这样我就可以将标签添加到最后添加的项目

  3. 一种将默认标签值设置为形状的方法,就像设置默认形状一样color/line宽度

或者有没有更好的选择也可行?

谢谢。


20200728

致约翰,感谢您的建议,我确实发现了一些可能对我的其他一些项目有帮助的有趣事件,但是我找不到能够在添加形状时自定义函数后触发的事件。

对于 Steve,我的计划是添加一个带有列表 UI 的无模式用户窗体来管理图层,形状标签和形状填充 texture/color 将根据当前选择的列表项来确定。

至于保存设置,我将使用 VBComponents.CodeModule 将用户表单中的现有设置转储到 VBA 模块并存储为文本,所以理论上我应该能够使这个功能自包含在一个文件中。

不完全是一个答案,抱歉,但是评论没有足够的范围来解决这个问题。所以...

对于史蒂夫,我的计划是添加一个无模式用户窗体,其中包含管理图层的列表 UI,形状标签和形状填充 texture/color 将根据列表确定当前选择的项目。

啊,原来你在创建自己的“伪层”。这还不清楚。感谢您提供附加信息。碰巧的是,我有一个选择管理器加载项,其工作方式与您所提议的非常相似。

致约翰,感谢您的建议,我确实发现了一些有趣的事件,可能对我的其他一些项目有帮助,但是我找不到能够在自定义函数之后触发的事件,而添加形状。

SelectionChange 事件应该会让您到达那里。当它触发时,您需要先检查当前选择是形状还是其他东西。如果是形状,请检查它的 .Index = 当前幻灯片的 .Shapes.Count 以及您是否已经标记了它。如果没有标签并且它是正确的索引,它将是一个新添加的形状。如果您要标记所有形状,您可能只需要检查 .Tag(name) 是否为空。

As to saving settings, I'll use VBComponents.CodeModule to dump existing settings in userforms to a VBA module and store as text, so in theory I should able to make this function self contained in one file.

为什么不将任何需要的幻灯片或演示文稿级信息另存为幻灯片或演示文稿级标签? PPT 可以吸收相当多的信息,因为标签 w/o 变得胡思乱想。