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

选择"顶级"组后,它将起作用。 当选择组中的形状(也可能是组本身(时,它不会。 当选择不在组中的形状时,它将再次工作。

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

当形状在组中时,如何获取对形状的引用?

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

使用Selection.IterationMode属性在选定内容中包含子选定形状

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

我不知道 Visio VBA,但试一试:

更新

Sub selectTest()
Dim x As Integer
Dim sel As Visio.Selection
Dim shp As Visio.Shape
Dim inner_shape As Visio.Shape
Set sel = ActiveWindow.Selection
Set shp = sel.PrimaryItem
For x = 1 To shp.Shapes.Count
Set inner_shape = shp.Shapes(x)
'// Do something with inner shape
Next
End Sub

最新更新