我不是Visio新手,也不是编程新手,但我是Visio开发新手。我使用的是2007年,我正在用形状数据创建自己的自定义形状。我想在绘图的上下文中为我的所有形状创建一个UniqueID。我已经创建了一个名为"Shape UniqueID"的形状数据元素。(ShapeSheet Prop.Shape_Unique_ID)我试图生成一个唯一的ID(形状)。属性),使用下面的公式语法,在ShapeSheet的"Value"单元格中为属性:
=UniqueID(visGetOrMakeGUID)和=UniqueID(1)但是Visio不认为这是一个有效的公式。
我也尝试使用DATA1():=警卫队(Data1 ())这给了我一个唯一的值,但它不会更新,如果你复制的形状。
我已经下载了2007 SDK,找不到一个Shapesheet函数来读取属性。
我也看到你可以设置页面,所以唯一id总是在使用的形状上,但我不知道如何打开它。
我的"偏好"是使用形状数据元素并设置它但是......
有什么想法会很感激吗?谢谢……斯科特
[注意这个答案与这里的答案大致相同]
唯一ID只能在代码中访问,也就是说,没有ShapeSheet函数会返回唯一ID (GUID)。
默认情况下,形状开始时没有UniqueID,所以你必须在代码中分配它。一些形状(如离页连接器形状)在ShapeSheet中存储唯一id,以便它们可以跟踪哪个形状连接到哪个形状,但这是由插件管理的。
您可以将GUID存储在ShapeSheet单元格中(通常是User单元格),但通常如果您有对形状的引用来读取单元格,那么您也可以读取。uniqueid属性。如果你正在寻找其他识别形状的方法,那就来吧。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