我不是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元素并将其设置为......
任何想法都会受到赞赏? 谢谢......斯科特
答案 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