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

How to get shape type in Visio using VBA?

我使用的是 Visio 2016 和 VBA,我正在处理一个包含 100 多个选项卡的 Visio 文件。我需要提取数据(主要是文本、连接器 from/to 和形状)用于处理引擎的数据处理。

我想知道如何在 Visio 中获取形状类型名称。例如,在流程图中,我试图弄清楚如何判断形状是过程、决策、数据等。

使用形状类型 属性 似乎总是 return 3 似乎是来自 https://docs.microsoft.com/en-us/office/vba/api/visio.visshapetypes 的 visTypeShape。

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

在此先感谢您的帮助。

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

shape.Master.Name 将 return 形状名称,但您需要先检查它是否为 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