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

PowerPoint VBA添加形状事件/添加带标记值的形状,vba,powerpoint,Vba,Powerpoint,我目前正在尝试使用VBA为PowerPoint添加一个小功能,我的目标是创建一个类似Photoshop图形层的小工具 我的计划是在用户绘制的每个形状上添加一个图层名称标记,以便以后我可以按循环解析每个项目,并根据标记值执行锁定/解锁、显示/隐藏形状,例如: Sub-add_-shape_与_-layer_-tag() Set islide=ActivePresentation.Slides(1) 设置ishape=islide.Shapes.AddShape(msoShapeRectangle,

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

我的计划是在用户绘制的每个形状上添加一个图层名称标记,以便以后我可以按循环解析每个项目,并根据标记值执行锁定/解锁、显示/隐藏形状,例如:

Sub-add_-shape_与_-layer_-tag()
Set islide=ActivePresentation.Slides(1)
设置ishape=islide.Shapes.AddShape(msoShapeRectangle,5,5,80,60)
ishape.Tags.Add“Layer”,“1”
端接头
子显示\隐藏\图层\一个\形状()
将活动幻灯片变暗为幻灯片
设置活动\u slide=ActiveWindow.View.slide
对于活动幻灯片形状中的每个ishape
如果ishape.Tags(“层”)=“1”,则
ishape.Visible=不(ishape.Visible)
如果结束
下一个ishape
端接头
然而,我找不到一种方法来实现这一点,所以我想问是否有一种方法可以提供以下功能

  • 覆盖“添加形状”功能,以便每次用户绘制形状时,我都可以将标记值潜入形状中

  • 捕获添加形状事件(如果该事件确实存在),以便我可以将标记添加到最后添加的项目

  • 一种将默认标记值设置为shape的方法,就像设置默认shape颜色/线宽一样

  • 还是有更好的选择也是可行的

    谢谢


    20200728

    感谢John的建议,我确实发现了一些有趣的事件,这些事件可能对我的其他一些项目有所帮助,但是我找不到在添加shape时能够在自定义函数之后触发的事件

    对Steve来说,我的计划是添加一个具有列表UI的无模式用户表单来管理层,形状标记和形状填充纹理/颜色将根据当前选择的列表项确定


    至于保存设置,我将使用VBComponents.CodeModule将userforms中的现有设置转储到VBA模块并存储为文本,因此从理论上讲,我应该能够使此函数包含在一个文件中。

    这不是一个完全的答案,很抱歉,但是注释不允许有足够的范围。所以

    对Steve来说,我的计划是添加一个具有列表UI的无模式用户表单来管理层,形状标记和形状填充纹理/颜色将根据当前选择的列表项确定

    啊,所以你正在创建你自己的“伪层”。那还不清楚。谢谢你的添加信息。碰巧,我有一个选择管理器插件,它的工作原理与您的建议非常相似

    感谢John的建议,我确实发现了一些有趣的事件,这些事件可能对我的其他一些项目有所帮助,但是我找不到在添加shape时能够在自定义函数之后触发的事件

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

    至于保存设置,我将使用VBComponents.CodeModule将userforms中的现有设置转储到VBA模块并存储为文本,因此从理论上讲,我应该能够使此函数自包含在一个文件中


    为什么不将任何所需的幻灯片或演示文稿级别信息保存为进一步的幻灯片或演示文稿级别标记?PPT可以吸收相当多的信息,因为标签不会变得古怪。

    试试谷歌搜索“PowerPoint事件”。你将如何确定要添加的标签?假设您可以捕获正在添加的新形状,那么什么将决定您添加到它们的标签呢?感谢您的建议,我发现这些建议非常有用。我认为使用选定对象标识实现选择更改肯定可以做到这一点,而且使用标记在表示层保存图层信息也比在VBA模块中转储更好,这减少了将文本解析回数据的工作。如果要在标记中存储大量数据,还有一个建议:很久以前我测试过这一点时,我发现,对于存储给定数量的数据,大量标记(每个标记包含少量数据)比少量标记(每个标记包含大量数据)打开演示文稿的速度要慢。当然,后者增加了从大数据块中解析少量数据的开销。这是用超过1兆字节的标签数据进行的测试;您不太可能存储这样的内容。