使用VBA宏在Visio中查找拖到屏幕上的形状的ID

时间:2018-06-27 11:32:35

标签: vba shape visio visio-vba

我目前在Visio中有一个程序,当将自定义模具中的特定形状拖到屏幕上时,会出现一个用户窗体,并向用户询问一个带有组合框的问题,供用户选择答案。 / p>

根据选择的答案,该对象的形状数据应更改。

我面临的问题是我不确定如何自动定位形状的ID,然后更改其形状数据。由于可以放置多个形状,因此我无法为每个ID手动编写新的代码。

Image: Shapesheet of the shape running the macro on drop. "Form" is the user form.

Image: Userform macro

如果有人可以帮助我解决这个问题,我将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:4)

我想知道CALLTHIS ShapeSheet函数是否在这里更有用,因为它传递了对调用形状的引用。因此,例如,在EventDrop单元格中添加以下公式:

CALLTHIS("ThisDocument.OnMyShapeDrop","Drawing001")

,然后添加以下辅助代码:

Public Sub OnMyShapeDrop(shp As Visio.Shape)
    MsgBox "Shape dropped - ID = " & shp.ID, vbOKOnly, "Shape Dropped"
End Sub

请注意,我已经将代码放在ThisDocument类中,但是它可以存在于任何可访问的模块中。另请注意,项目名称(Drawing001)可能是不带扩展名的文件名。