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 对象的两种方法: ShapeIDsToUniqueIDs 和 UniqueIDsToShapeIDs。
默认情况下,形状没有唯一 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。