как определить - на какой прямоугольник нажали

Программирование на Visual Basic for Applications
aess
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 17.12.2008 (Ср) 17:36

как определить - на какой прямоугольник нажали

Сообщение aess » 17.12.2008 (Ср) 17:43

Привет, вопрос такой
создаю 2 прямоугольника кодом, назначаю им
процедуру при нажатии, все работает:
Код: Выделить всё
Private Sub CommandButton1_Click()
    For i = 1 To 2
        ActiveSheet.Shapes.AddShape(msoShapeRectangle, i * 100, 100, 80, 30).Select
        ActiveSheet.Shapes(i + 1).OnAction = "Sheet1.AddNextLevel"
    Next i
End Sub

Public Sub AddNextLevel(Optional z As Variant = 0)
    MsgBox z
End Sub


Но мне нужно, чтобы определялось - на какой именно прямоугольник нажали. Для этого я пытался ввести аргумент
в вызов процедуры:
Код: Выделить всё
Private Sub CommandButton1_Click()
    For i = 1 To 2
        ActiveSheet.Shapes.AddShape(msoShapeRectangle, i * 100, 100, 80, 30).Select
        ActiveSheet.Shapes(i + 1).OnAction = "Sheet1.AddNextLevel(" & i + 1 & ")"
    Next i
End Sub

Public Sub AddNextLevel(Optional z As Variant = 0)
    MsgBox z
End Sub


Однако в ответ ругательство:
Run-time error '1004':
Formula is too complex to be assigned to object.

Как это сделать чтобы работало? Ну или глобально - как мне определить - на какой из прямоугольников было сделано нажатие (прямоугольников может быть и 100, и 1000, так что нужно динамически).

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Re: как определить - на какой прямоугольник нажали

Сообщение Евгений Д. » 17.12.2008 (Ср) 19:19

Можно так:
Код: Выделить всё
Private Sub CommandButton1_Click()

Dim iShapeNum As Integer

  With ActiveSheet.Shapes
    For iShapeNum = 1 To 10
      .AddShape msoShapeRectangle, .Count * 60, 50, 40, 30   '.Select
      .Item(.Count).OnAction = "Sheet1.AddNextLevel"
    Next iShapeNum
  End With  'ActiveSheet.Shapes
 
End Sub


Public Sub AddNextLevel()

  MsgBox ActiveSheet.Shapes(Application.Caller).ZOrderPosition

End Sub

aess
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 17.12.2008 (Ср) 17:36

Re: как определить - на какой прямоугольник нажали

Сообщение aess » 18.12.2008 (Чт) 9:22

OK, огромное спасибо - это именно то что я искал :D


Вернуться в VBA

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

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

    TopList