使用形状工作表为Visio形状创建唯一ID



我不是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

相关内容

  • 没有找到相关文章

最新更新