如何使用VBA在Visio中获取形状类型?

时间:2019-02-25 19:11:34

标签: vba visio visio-vba

我正在使用Visio 2016和VBA,并且正在处理具有100多个标签的Visio文件。我需要提取数据(主要是文本,与/之间的连接器和形状)以进行处理引擎的数据处理。

我试图弄清楚如何在Visio中获得形状类型名称。例如,在流程图中,我试图找出如何判断形状是否是过程,决策,数据等。

使用shape type属性似乎总是​​返回3,它似乎是https://docs.microsoft.com/en-us/office/vba/api/visio.visshapetypes中的visTypeShape。

任何人都不知道如何使用VBA获得形状类型吗?我也可以直接从OpenXML文件中解析XML,但是我也无法在XML文件中找到形状名称。

我先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

不确定我的问题为什么会被否决,但我只是想出了答案,所以我在分享,以防其他人遇到此问题而在其他任何地方都找不到答案。

shape.Master.Name将返回形状名称,但是如果不是形状,则需要先检查Nothing。我没有那样做,它不断破坏脚本。

此代码段将循环遍历活动页面上的所有形状,并获得ID和形状名称:

Public Sub GetShapeAndID()

Dim visShape As Shape

For Each visShape In ActivePage.Shapes
    If Not visShape.Master Is Nothing Then
     Debug.Print visShape.ID & " - " & visShape.Master.Name
    End If
Next

End Sub