Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA(Visio)中选择分组形状_Vba_Visio_Shapes - Fatal编程技术网

在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 我将访问所有父图形。我

我正在尝试使用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
我将访问所有父图形。我想要的是访问孩子们的形状。
是否可以在不取消分组(父)形状的情况下访问它?

您可以使用
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我在中修改了我的代码如何更精确地解决这个问题