Как из макроса определить какой Shape его вызвал

Программирование на Visual Basic for Applications
Ded2007
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.09.2006 (Сб) 18:17

Как из макроса определить какой Shape его вызвал

Сообщение Ded2007 » 09.09.2006 (Сб) 18:35

Упрощенно:
1. Инструментом Рисование/Надпись создаем надписи Москва, Киев, Питер
2. Каждой из них присваиваем макрос Макрос1.

Внимание вопрос:Как в макросе узнать по какой надписи щелкнул юзер?

Доп. вопрос:
Код: Выделить всё
Set myDocument = Worksheets(1)
  For Each sh In myDocument.Shapes
    If sh.Type = msoTextBox Then
    ActiveSheet.Shapes(e).Select
    With Selection
      .OnAction = "Макрос 1"
    End With
  End If
Next


Т.е. можно пробежаться по надписям и присвоить им один и тот же макрос, а нельзя ли к ним привязать функцию с аргументом. Для первой надписи Функция(1), для второй Функция(2) и т.д.?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 09.09.2006 (Сб) 19:18

Есть проперть actioncontrol, по моему у commandbars.

Она содержит ссылку на контрол, который был активирован.

Если ее анализировать в макросе то, вполне можно понять, какой контрол активировал макрос :)

Ded2007
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.09.2006 (Сб) 18:17

Сообщение Ded2007 » 09.09.2006 (Сб) 19:35

RayShade писал(а):Есть проперть actioncontrol, по моему у commandbars.
Она содержит ссылку на контрол, который был активирован.
Если ее анализировать в макросе то, вполне можно понять, какой контрол активировал макрос :)


Насколько я понял у Shapes такого свойства нет. Или я не прав?
Вот это работает для CommandBars
Код: Выделить всё
Sub whichButton()
Select Case CommandBars.ActionControl.Tag
    Case "1"
        MsgBox ("Button 1 clicked.")
    Case "2"
        MsgBox ("Button 2 clicked.")
    Case "3"
        MsgBox ("Button 3 clicked.")
End Select
End Sub


НО я не могу это переложить на нарисованные фигуры (звездочки на карте) или надписи (на той же карте). Чего-то не дотягиваю?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.09.2006 (Сб) 20:10

1. Присвоить аргумент нельзя, и
2. Application.Caller
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 09.09.2006 (Сб) 20:14

Код: Выделить всё
Sub Macro()
    MsgBox Worksheets(1).Shapes(Application.Caller).TextFrame.Characters.Text
End Sub
Привет,
KL

Ded2007
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.09.2006 (Сб) 18:17

Сообщение Ded2007 » 09.09.2006 (Сб) 20:26

Спасибо!

Все гениальное просто :lol:

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 09.09.2006 (Сб) 20:54

Блин. Это я с менюхой перепутал. не думал что onaction есть еще у кого то еще :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList