【问题标题】:How to get shape type in Visio using VBA?如何使用 VBA 在 Visio 中获取形状类型?
【发布时间】:2019-02-25 19:11:34
【问题描述】:

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

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

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

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

感谢您提前提供的任何帮助。

【问题讨论】:

    标签: vba visio


    【解决方案1】:

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

    shape.Master.Name 将返回形状名称,但您需要先检查它是否为 Nothing,以防它不是形状。我没有这样做,它一直在破坏脚本。

    这个 sn-p 将遍历活动页面上的所有形状并获取 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
    

    【讨论】:

    • 还要记住,Master 具有本地 (Name) 和通用 (NameU) 属性。本地名称是您将在 UI 中看到的名称,而通用名称是只有在最初设置后才能在代码中更改的名称。有关详细信息,请参阅此:blogs.msdn.microsoft.com/visio/2006/07/27/name-and-nameu
    • 这是很好的信息。这让我仔细检查了我的导出,谢天谢地,他们似乎没有覆盖我提供的 Visio 文档中的名称,所以我现在很好。如果我需要再次这样做,我会记住这一点。谢谢,@JohnGoldsmith!
    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多