Page.ShapeIDsToUniqueIDs 方法 (Visio)

返回页面上形状的唯一 ID 的数组,由形状 ID 指定。

语法

expression. ShapeIDsToUniqueIDs( _ShapeIDs()_ , _UniqueIDArgs_ , _GUIDs()_ )

表达 返回 Page 对象的表达式。

参数

名称 必需/可选 数据类型 说明
ShapeIDs () 必需 Long 与活动绘图页上的一组形状对应的形状 ID 类型 Long 数组。
UniqueIDArgs 必需 VisUniqueIDArgs 获取、删除或创建 Shape 对象的唯一 ID。 有关可能值,请参见备注。
GUID () 必需 字符串 out 参数。 一个空数组,该方法使用与 ShapeIDs () 中指定的形状对应的 String 类型的唯一 ID 填充

返回值

Nothing

注解

Microsoft Visio 通过两种不同的 ID 来标识形状:形状 ID 和唯一 ID。 形状 ID 是数值,在单个绘图页的范围内对形状进行唯一标识。 不过,这些 ID 在更大的范围内并不是唯一的。

唯一 ID 是全局唯一标识符 (GUID)。 它们在应用程序范围内是唯一的。

若要在形状 ID 和唯一 ID 之间转换,可以使用 Page 对象的两种方法: ShapeIDsToUniqueIDsUniqueIDsToShapeIDs

默认情况下,形状没有唯一 ID。 仅当设置了形状的 Shape.UniqueID 属性时,形状才会获取唯一 ID。 如果 Shape 对象具有唯一 ID,则任何其他文档中的任何其他形状都不会具有这一 ID。

UniqueIDArgs 参数设置并控制 ShapeIDs() 中所有形状的 UniqueID 属性的行为。 UniqueIDArgs 应在 VisUniqueIDArgs 中的 Visio 类型库中声明下列值之一。

常量 Description
visGetGUID 0 仅在形状已经具有唯一 ID 的情况下返回唯一 ID 字符串。 否则,将返回零长度字符串 (" ")。
visGetOrMakeGUID 1 返回形状的唯一 ID 字符串。 如果形状尚不具有唯一 ID,则会为该形状分配一个唯一 ID,然后返回这个新的 ID。
visDeleteGUID 2 删除形状的唯一 ID 并返回一个长度为零的字符串 ("")。
visGetOrMakeGUIDWithUndo 3 返回形状的唯一 ID 字符串。 如果形状尚未具有唯一 ID,则向形状分配一个 ID 并返回新 ID。 不可操作。
visDeleteGUIDWithUndo 4 清除形状的唯一 ID,并返回零长度字符串 (“”) 。 不可操作。

示例

以下 Microsoft Visual Basic for Applications (VBA) 宏演示如何使用 ShapeIDsToUniqueIDs 方法确定传递给 方法的页面上形状的唯一 ID。 该宏将遍历活动绘图页上的所有形状,同时使用 Shape.UniqueID 属性来获取形状的形状 ID,然后将这些 ID 组成的数组作为 ShapeIDs() 参数传递给 ShapeIDsToUniqueIDs 方法,以获取这些形状的唯一 ID。 对于 UniqueIDArgs 参数,它将传递值 visGetOrMakeGUID,并告知 Visio 为尚没有唯一 ID 的任何形状创建一个唯一 ID。 它会将唯一 ID 和形状 ID 输出到“立即”窗口中。

在运行此宏之前,请打开一个 Visio 绘图,并在活动绘图页上放置若干形状。

Public Sub ShapeIDsToUniqueIDs_Example()
    Dim vsoShape As Visio.Shape 
    Dim intArrayCounter As Integer 
     
    intShapeCount = ActivePage.Shapes.Count 
     
    ReDim alngShapeIDs(intShapeCount - 1) As Long 
    ReDim astrUniqueIDs(intShapeCount - 1) As String 
     
    intArrayCounter = 0 
         
    For Each vsoShape In ActivePage.Shapes 
        alngShapeIDs(intArrayCounter) = vsoShape.ID 
        Debug.Print alngShapeIDs(intArrayCounter) 
        intArrayCounter = intArrayCounter + 1 
    Next 
     
    ActivePage.ShapeIDsToUniqueIDs alngShapeIDs, visGetOrMakeGUID, astrUniqueIDs 
     
    intArrayCounter = 0 
     
    For intArrayCounter = LBound(astrUniqueIDs) To UBound(astrUniqueIDs) 
        Debug.Print astrUniqueIDs(intArrayCounter) 
    Next 
 
End Sub

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。