Vba 如何将形状对象添加到形状集合

Vba 如何将形状对象添加到形状集合,vba,vsto,powerpoint,Vba,Vsto,Powerpoint,这可能看起来很琐碎,但我一直没能找到办法。PowerPoint对象模型如何允许您将形状对象添加到幻灯片的形状集合中?我可以使用shapes.AddSmartArt(),shapes.AddPicture()等函数添加新形状,但这些函数将添加新形状。如果我有一个要添加到幻灯片形状中的现有形状对象引用,该怎么办 一种方法是在shape对象上调用Copy(),然后在目标幻灯片中调用Paste(),但我发现这不太理想,因为我们将在过程中修改剪贴板(我知道我们可以在操作后恢复它,但这同样是不合理的) 就我

这可能看起来很琐碎,但我一直没能找到办法。PowerPoint对象模型如何允许您将
形状
对象添加到幻灯片的
形状
集合中?我可以使用
shapes.AddSmartArt()
shapes.AddPicture()
等函数添加新形状,但这些函数将添加新形状。如果我有一个要添加到幻灯片形状中的现有形状对象引用,该怎么办

一种方法是在shape对象上调用
Copy()
,然后在目标幻灯片中调用
Paste()
,但我发现这不太理想,因为我们将在过程中修改剪贴板(我知道我们可以在操作后恢复它,但这同样是不合理的)

就我所搜索的
Shapes
集合中没有
Add()
Append()
Insert()
函数

编辑 也许我说得不够清楚。让我再试一次。假设我在一个变量中有一个Shape对象,如下所示(PowerPoint/VSTO/C#):


我需要一个合适的函数来代替
;类似于
Add
Insert
Append
等,但在对象模型中不存在类似的内容。

形状集合是只读的。这是因为它们只包含特定于某个范围的形状。换句话说,这个范围可以是一个段落、一个部分、一个标题、一个组形状、整个文档等等。在PowerPoint中,我假设您可以从一张幻灯片、所有幻灯片以及一个组形状中获得形状列表

不能直接添加到形状集合中,因为必须指定该形状的放置位置。使用新形状执行此操作的方法已经存在。这种方法不适用于移动或复制形状


如果有一种方法可以将形状移动到不同的位置而不使用复制/粘贴,那就太好了,但是微软一定有人认为不值得这么做。

形状集合是只读的。这是因为它们只包含特定于某个范围的形状。换句话说,这个范围可以是一个段落、一个部分、一个标题、一个组形状、整个文档等等。在PowerPoint中,我假设您可以从一张幻灯片、所有幻灯片以及一个组形状中获得形状列表

不能直接添加到形状集合中,因为必须指定该形状的放置位置。使用新形状执行此操作的方法已经存在。这种方法不适用于移动或复制形状


如果有一种方法可以将形状移动到不同的位置而不使用复制/粘贴,那就太好了,但是微软一定有人认为这样做不值得。

我真的不理解你的问题:将形状从一张幻灯片移动或复制到另一张幻灯片的方法是复制、粘贴并删除旧的(如果需要)。修改剪贴板的内容意味着什么?当你想成功时,你必须保持剪贴板的原样。@ChristineRoss:请看我的编辑。我的答案仍然是复制粘贴。您不需要神秘的函数getshape,因为所有类型的形状都有一个创建方法(形状、图表等等)。看,我真的不明白你的问题:将形状从一张幻灯片移动或复制到另一张幻灯片的方法是复制、粘贴并删除旧的(如果需要)。修改剪贴板的内容意味着什么?当你想成功时,你必须保持剪贴板的原样。@ChristineRoss:请看我的编辑。我的答案仍然是复制粘贴。您不需要神秘的函数getshape,因为所有类型的形状都有一个创建方法(形状、图表等等)。再见。这也是我的结论。这也是我的结论。
Shape s = GetShape(); //This function returns a Shape object
MyPresentation.Slides[1].Shapes.???(s);