Выходной идентификатор фигуры, перетаскиваемой на экран в Visio-VBA
У меня есть следующий код:
Sub CommandButton1_Click()
Dim NoIO As String
Dim shp1 As Visio.Shape
Dim i As Integer
Set shp1 = Application.ActivePage.Shapes(1)
NoIO = ComboBox1.Value
If NoIO = "7" Then
MsgBox shp1.id
'Target shape id selected'
'Change shape data of that shape'
End If
Unload Me
End Sub
Всякий раз, когда фигура сбрасывается на экран, пользователю предоставляется форма пользователя. Когда он отправлен, этот код запускается.
В настоящее время я могу вывести только идентификатор фигуры, впервые перетащенной на экран, показанный этой строкой:
Set shp1 = Application.ActivePage.Shapes(1)
Как я могу изменить это так, чтобы вместо этого отображался идентификатор фигуры, перетаскиваемой на экран?
Спасибо
1 ответ
Если вы используете обработчик EventDrop и ячейку ShapeSheet, вы можете просто передать идентификатор формы своей функции. Вы можете использовать что-то вроде формулы ниже (где ID()
является встроенной функцией, возвращающей идентификатор формы Вы можете использовать его, чтобы получить форму из OnDrop
обработчик, определенный в вашем коде VBA. "&" используется для объединения текстовых строк в VBA:
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("ThisDocument.OnDrop")
А потом в VBA:
Sub OnDrop(x As Shape)
Debug.Print shape.ID
' do something with the shape
End Sub
В обработчике событий перед тем, как показывать форму, вам нужно запомнить форму, а затем передать ее в форму.
Обратите внимание, что в приведенных выше примерах я предполагаю, что "OnDrop" определен в "ThisDocument". Если это определено в модуле, вам не нужен "ThisDocument". префикс
Еще одним вариантом может быть обработка события "Shape Added" в VBA вместо указания формулы ShapeSheet. В этом случае ваш обработчик событий получает форму, отбрасываемую в качестве параметра.