我有以下代码:
Sub CommandButton1_Click() DIO NoIO As String Dim shp1 As Visio.Shape Dim i As Integer
设置shp1 = Application.ActivePage.Shapes(1) NoIO = ComboBox1.Value
…
如果您正在使用EventDrop处理程序和ShapeSheet单元格,则只需将形状ID传递给您的函数即可。你可以使用类似下面的公式(在哪里 ID() 是一个返回形状ID的内置函数。您可以使用它来获取形状 OnDrop 在VBA代码中定义的处理程序。 “&安培;”用于在VBA中连接文本字符串:
ID()
OnDrop
RUNMACRO("ThisDocument.OnDrop("& ID() &")")
然后在VBA中:
Sub OnDrop(shapeId) Debug.Print shapeId Set shape = ActiveDocument.Shapes.ItemFromID(shapeId) ' do something with the shape End Sub
更好,你可以使用 CALLTHIS 代替 RUNMACRO (它总是将主题形状作为第一个参数传递)
CALLTHIS
RUNMACRO
CALLTHIS("ThisDocument.OnDrop")
Sub OnDrop(x As Shape) Debug.Print shape.ID ' do something with the shape End Sub
在事件处理程序中,在显示表单之前,您需要记住形状,然后可以将其传递给表单。
请注意,我在上面的例子中假设“OnDrop”在“ThisDocument”中定义。如果它在模块中定义,则不需要“ThisDocument”。字首
另一种选择可能是处理VBA中的“Shape Added”事件,而不是指定ShapeSheet公式。在这种情况下,您的事件处理程序会将形状作为参数删除。