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

使用VBA宏在Visio中查找拖到屏幕上的形状id,vba,shapes,visio,Vba,Shapes,Visio,我目前在Visio中有一个程序,当我的自定义模具中的特定形状拖到屏幕上时,会出现一个用户窗体,向用户询问一个问题,并使用一个组合框供用户选择答案 根据选定的答案,该对象的形状数据应该更改 我面临的问题是,我不确定如何自动将形状的ID作为目标,然后更改其形状数据。由于可能会放置多个这样的形状,因此我无法为每个ID手动编写新的代码 如果有人能帮我解决这个问题,我将非常感激 谢谢我想知道CALLTHISShapeSheet函数在这里是否更有用,因为它传递了对调用形状的引用。例如,在EventDro

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

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

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

如果有人能帮我解决这个问题,我将非常感激


谢谢

我想知道
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),它很可能是不带扩展名的文件名。

我想知道
调用此
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),它可能是没有扩展名的文件名。

您如何知道何时打开用户表单?换句话说,你在处理什么事件?另外,一些代码也会有帮助。嗨,泽夫,我编辑了我的帖子,以显示当形状被放到屏幕上时,用户窗体宏会运行。(EventDrop)。我还附上了我当前的代码。你怎么知道什么时候打开用户表单?换句话说,你在处理什么事件?另外,一些代码也会有帮助。嗨,泽夫,我编辑了我的帖子,以显示当形状被放到屏幕上时,用户窗体宏会运行。(EventDrop)。我还附上了我当前的代码。对于像我这样认为这个答案有帮助的人,提供了一些额外的示例材料。对于像我这样认为这个答案有帮助的人,提供了一些额外的示例材料。