Интерактивность AutoShape-объектов. Обработка событий

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Goodwin
Сообщения: 4
Зарегистрирован: 14 дек 2007, 22:48

Требуется макрос, определяющий на какой из многих объектов-AutoShape, расположенных на листе, выполнился щелчок мышью. Итогом макроса должен быть msgbox с именем этой фигуры (или текста в нее вложенного). Прописывать процедуры для каждой из фигур не представляется возможным: во-первых, их достаточно много, во-вторых, некоторые фигуры динамически создаются (удаляются) иными процедурами.
Вот такая задача. Есть мысли?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

В PowerPoint это делается на раз

Код: Выделить всё

Sub Identify( oShp as Shape)
   Msgbox oShp.Name, vbInformation+vbOkOnly
End Sub
В Excel 2003 (в предположении что всем шейпам назначен макрос ClickAnyShape)

Код: Выделить всё

Public Sub ClickAnyShape()
    MsgBox ActiveSheet.Shapes(Application.Caller).Name & " (" & Application.Caller & ") Clicked"
End Sub
Обратите внимание что Application.Caller не идентичен ActiveSheet.Shapes(Application.Caller).Name
Goodwin
Сообщения: 4
Зарегистрирован: 14 дек 2007, 22:48

Да, речь идет об Excel-2007
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Не имею сейчас возможности попробовать приведённый код в 2007 Excel.
Попробуйте ...
P.S Для динамически создаваемых шейпов необходимо прописывать имя макроса
"ClickAnyShape" в property OnAction
Goodwin
Сообщения: 4
Зарегистрирован: 14 дек 2007, 22:48

Благодарю! Все отлично работает.

однако, возник еще один вопрос (опциональный): возможно ли подобную процедуру "повесить" на клик правой кнопкой мыши?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Единственное что приходит в голову: поменять местами внешней программой коды
выдаваемые кликом мышью ;) Но надо ли ...
Ответить