我不是Visio的新手,也不是编程的新手,但我是在Visio中进行开发的新手。我使用的是2007,并使用形状数据创建了自己的自定义形状。我想在绘图上下文中为所有形状创建一个UniqueID。我已经创建了一个名为'Shape UniqueID‘的形状数据元素。(ShapeSheet Prop.Shape_Unique_ID)我尝试使用下面的公式语法在属性的Shape.UniqueID‘ShapeSheet’单元格中生成一个唯一的ID (Value属性):
=UniqueID(visGetOrMakeGUID) and =UniqueID(1) But Visio does not recognize this as a valid Formula..我还尝试使用DATA1():=Guard(Data1()),它为我提供了一个惟一的值,但如果复制形状,它不会更新。
我已经下载了2007SDK,但找不到Shapesheet函数来读取属性。
我还看到你可以设置页面,使UniqueID总是在所使用的形状上,但我不知道如何打开它。
我的“首选”是使用一个形状数据元素并设置它,但是......
如果您有什么想法,我会很感激。谢谢..。史考特
发布于 2013-06-11 03:24:46
[请注意,此答案是here的粗略副本]
只有在代码中才能访问UniqueID,也就是说,没有返回唯一ID (GUID)的ShapeSheet函数。
默认情况下,形状开始时没有UniqueID,因此您必须在代码中分配它。一些形状,如页外连接符形状,将唯一ID存储在ShapeSheet中,以便它们可以跟踪哪个形状连接到哪个形状,但这是由一个插件管理的。
您可以在ShapeSheet单元格(通常是用户单元格)中存储GUID,但通常情况下,如果您有一个对形状的引用来读取单元格,那么您还可以读取.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 Subhttps://stackoverflow.com/questions/16994806
复制相似问题