【问题标题】:Select grouped Shapes in VBA (Visio)在 VBA (Visio) 中选择分组形状
【发布时间】:2018-02-23 13:11:23
【问题描述】:

我正在尝试使用 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

我将访问所有父形状。我想要的是访问孩子们的形状。 是否可以在不取消分组(父)形状的情况下访问它?

【问题讨论】:

  • 您可以访问组形状,即:vsoShape.Shapes(1).Name
  • 实际上常规形状可以有子形状,例如泳道...所以我认为这段代码无效,您需要通过查看组属性部分来确定哪些形状是组...
  • 所以也许这是更好的方法: If Shp.GroupItems.Count > 0 Then Shp.Ungroup Else ....
  • 找到它:Shape.Type 属性保持标记如果形状是组:msdn.microsoft.com/en-us/library/office/ff767768.aspx 所以在获得组形状后,您可以继续提取子形状...干杯

标签: vba visio shapes


【解决方案1】:

您可以使用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

【讨论】:

  • 我修改了问题中的代码,以增加解决方法的准确性
猜你喜欢
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多