我需要引用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)在上下文菜单中添加一个自定义的Delete按钮(起作用),这应该调用deletemethod,该方法获取调用该方法的形状作为参数,以便它可以搜索相应的DB条目并删除在使用shape.delete
删除形状(及其所有子形状)之前(以及所选子形状为一组的任何子形状的条目)答案 0 :(得分:2)
使用Selection.IterationMode
属性在选择中包括子选择的形状
Set sel = ActiveWindow.Selection
sel.IterationMode = 0
Set shp = sel.PrimaryItem
答案 1 :(得分:0)
我不了解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