在VBA(Visio)中选择分组形状
我正在尝试使用VBA运行当前visio文档的所有形状,以从中导出一些字符串 这似乎很容易,但我不知道如何得到分组的形状 通过这样做:在VBA(Visio)中选择分组形状,vba,visio,shapes,Vba,Visio,Shapes,我正在尝试使用VBA运行当前visio文档的所有形状,以从中导出一些字符串 这似乎很容易,但我不知道如何得到分组的形状 通过这样做: Dim vsoShapes AS Visio.Shapes Dim vsoShape AS Visio.Shape Set vsoShapes = Application.ActiveWindow.Page.Shapes For Each vsoShape In vsoShapes ' my code ' my code Next 我将访问所有父图形。我
Dim vsoShapes AS Visio.Shapes
Dim vsoShape AS Visio.Shape
Set vsoShapes = Application.ActiveWindow.Page.Shapes
For Each vsoShape In vsoShapes
' my code
' my code
Next
我将访问所有父图形。我想要的是访问孩子们的形状。
是否可以在不取消分组(父)形状的情况下访问它?您可以使用
Shapes
属性,即vsoShape.Shapes(1).Name
全循环:
Dim vsoShapes AS Visio.Shapes
Dim vsoShape AS Visio.Shape
Dim i As Integer
Dim shapeCount As Integer
Set vsoShapes = Application.ActiveWindow.Page.Shapes
For Each vsoShape In vsoShapes
shapeCount = vsoShape.Shapes.Count
If shapeCount > 1 Then
i = 1
For i = 1 To shapeCount
MsgBox vsoShape.Shapes(i).Text
Next i
End If
Next
您可以访问组形状,即:
vsoShape.shapes(1).Name
实际上规则形状可以有子形状,例如泳道…因此我认为此代码无效,您需要通过查看“分组属性”部分来确定哪些形状是分组的…因此,也许这是更好的方法:如果Shp.GroupItems.Count>0,那么Shp.Ungroup Else…找到它:Shape.Type property hold mark如果Shape是分组的:所以在获得分组形状之后,您可以继续进行子形状提取…Cheers我在中修改了我的代码如何更精确地解决这个问题