使用形状表创建Visio形状的唯一ID

时间:2013-06-08 00:35:02

标签: visio shapes unique-id shapesheet

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

我也试过使用DATA1():     =保护(数据1()) 这给了我一个独特的价值但是如果复制形状它就不会更新。

我已经下载了2007 SDK,但找不到Shapesheet函数来读取属性。

我还看到你可以设置页面,所以UniqueID总是在使用的形状上,但我无法弄清楚如何打开它。

我的“偏好”是使用Shape Data元素并将其设置为......

任何想法都会受到赞赏? 谢谢......斯科特

1 个答案:

答案 0 :(得分:1)

[注意这个答案是here]

的粗略重复

UniqueID只能在代码中访问,也就是说,没有ShapeSheet函数会返回唯一ID(GUID)。

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

您可以将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