Visio VBA获取粘贴形状

时间:2013-02-20 16:48:14

标签: vba visio

我有一个在Visio 2003和2010之间工作方式不同的宏。我正在将一个形状复制并粘贴到页面上,并尝试获取指向粘贴形状的指针。在2003年,该形状只是页面上的最后一个形状(set ShpObj = PagObj.Shapes(PagObj.Shapes.Count))。但是,在2010年,似乎粘贴的形状并不总是设置在页面的最后一个形状上。

目前我在粘贴操作之前记录页面上的所有独特形状,然后在粘贴操作后识别新形状。

我尝试监视应用程序ShapeAdded事件,但似乎没有触发粘贴操作。

我还有其他方法可以选择粘贴的形状吗?

3 个答案:

答案 0 :(得分:1)

你是如何复制的? Visio 2010获得了更多枚举,可以更好地控制粘贴操作的术语或位置以及可能影响收集顺序的容器和标注行为:

Visio 2010 Page.Paste

Visio 2007 Page.Paste

很遗憾Paste没有返回选择,但你看过Shape.Duplicate和Selection.Duplicate分别返回形状和选择对象吗?

答案 1 :(得分:0)

通过在粘贴操作之前创建新的临时图层并将图层的“活动”单元格设置为true来利用Visio的图层功能。将Active设置为true意味着添加到页面的任何新形状都将添加到此图层。然后,当粘贴操作完成后,您可以获得该图层上的所有形状。要清理,您可以删除临时图层而不删除形状。

答案 2 :(得分:0)

在Visio 2010中,粘贴它们时始终会选择新粘贴的形状(或形状)。因此,在粘贴操作之后,ActiveWindow.Selection或类似的将获得新粘贴的形状。