首页 > 解决方案 > Visio VBA 从选择中获取形状

问题描述

我需要在 Visio 中引用一个选定的(通过鼠标单击,它只需要是一个选择)形状。然而,形状可能在一个组中。当我在组中选择一个形状时,我似乎无法让它工作,shp 对象仍然是空的。

Sub selectTest()
    Dim sel As Visio.Selection
    Set sel = ActiveWindow.Selection
    Dim shp As Visio.Shape
    Set shp = sel.PrimaryItem

    If Not shp Is Nothing Then
        MsgBox "It worked"
    Else
        MsgBox "No shape in sel"
    End If        
End Sub

选择“顶级”组时,它可以工作。当组中可能是组本身的组形状时,就没有选择。When a shape which is not in a group is selected, it works again.

上下文:我想从上下文菜单中触发自定义 VBA 代码。当您右键单击形状时,它会自动被选中。

当它在一个组中时,如何获得对形状的引用?

编辑:进一步澄清:我的文档中的形状都有相应的数据库条目。我想(通过 XML)向上下文菜单添加一个自定义删除按钮(有效),这应该调用一个删除方法,该方法获取调用该方法的形状作为参数,以便它可以搜索相应的数据库条目并删除在使用 shape.delete 删除形状(及其所有子形状)之前(以及任何子形状的条目,如果所选形状是一个组)

标签: vbams-officevisio

解决方案


使用Selection.IterationMode属性在选择中包含子选择的形状

Set sel = ActiveWindow.Selection
sel.IterationMode = 0
Set shp = sel.PrimaryItem

推荐阅读