1

我对 Visio 和编程并不陌生,但我对在 Visio 中进行开发并不陌生。我正在使用 2007 并正在使用形状数据创建自己的自定义形状。我想在绘图的上下文中为我的所有形状创建一个 UniqueID。我创建了一个名为“Shape UniqueID”的形状数据元素。(ShapeSheet Prop.Shape_Unique_ID)我尝试使用下面的公式语法在属性的 ShapeSheet“值”单元格中生成唯一 ID(Shape.UniqueID 属性):
=UniqueID(visGetOrMakeGUID) 和 =UniqueID(1) 但 Visio不认为这是一个有效的公式..

我也尝试使用 DATA1(): =Guard(Data1()) 这给了我一个唯一的值但是如果你复制形状它不会更新。

我已下载 2007 SDK,但找不到用于读取属性的 Shapesheet 函数。

我还看到您可以设置页面,以便 UniqueID 始终位于使用的形状上,但我不知道如何打开它。

我的“偏好”是使用形状数据元素并设置它但是......

任何想法,将不胜感激?谢谢...斯科特

4

1 回答 1

2

[请注意,此答案与此处的答案大致相同]

UniqueID只能在代码中访问,即没有返回唯一 ID (GUID) 的 ShapeSheet 函数。

默认情况下,形状开始时没有 UniqueID,因此您必须在代码中分配它。某些形状(例如页外连接器形状)将唯一 ID 存储在 ShapeSheet 中,以便它们可以跟踪哪个形状连接到哪个形状,但这由插件管理。

您可以将 GUID 存储在 ShapeSheet 单元格(通常是用户单元格)中,但通常如果您有对形状的引用来读取单元格,那么您也可以读取 .UniqueID 属性。如果您正在寻找其他方法来识别形状,那么 shp. ID(或 ID() ShapeSheet 函数)将返回页面唯一的 ID,因此这也可能需要考虑

下面是一些演示如何使用 UniqueID 的示例代码:

Sub UniqueIDsDemo()

Dim vPag As Page
Set vPag = ActivePage

Dim vShp As Shape
Set vShp = vPag.DrawRectangle(1, 1, 1, 1)
Debug.Print vShp.NameID & " UniqueID = '" & vShp.UniqueID(visGetGUID) & "'"

Dim sGUID As String
sGUID = vShp.UniqueID(visGetOrMakeGUID)

Debug.Print vShp.NameID & " UniqueID = '" & vShp.UniqueID(visGetGUID) & "'"

vShp.AddSection visSectionUser
Dim rowIdx As Integer
Dim cellName As String
cellName = "UniqueID"
rowIdx = vShp.AddNamedRow(visSectionUser, cellName, visTagDefault)
vShp.CellsSRC(visSectionUser, rowIdx, visUserValue).FormulaU = sGUID

Debug.Print vShp.NameID & "!User." & cellName & " = '" & vShp.CellsU("User." & cellName).ResultStrU("") & "'"

End Sub
于 2013-06-10T19:24:46.137 回答