Если вы используете обработчик 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. В этом случае ваш обработчик событий получает форму, отбрасываемую в качестве параметра.