Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Клик по Shape, Как определить, по какой именно Shape кликнули?
 
Добрый день!
На листе находится много надписей (Shapes), по щелчку цепляю макрос, один на всех. Хотелось бы программно определить, по какому конкретно шейпу кликнули, чтобы общим макросом обработать именно этот шейп. Т.е. не хочу писать отдельные макросы для каждого шейпа, их много и вообще получается не красиво.
 
поэкспериментируйте с Application.Caller
Код
Select Case TypeName(Application.Caller)
    Case "Range"
        v = Application.Caller.Address
    Case "String"
        v = Application.Caller
    Case "Error"
        v = "Error"
    Case Else
        v = "unknown"
End Select
MsgBox "caller = " & v
F1 творит чудеса
 
Спасибо, вроде работает.
Код
Function ActiveShape() As Shape
If (TypeName(Application.Caller) = "String") Then _
    Set ActiveShape = ActiveSheet.shapes(Application.Caller)
End Function
 
В принципе,
Код
MsgBox Application.Caller
для первого попавшегося Shape дал мне результат "Прямоугольник 1"
Может, так вам проще будет
F1 творит чудеса
 
Да, все прекрасно. Возможно, подскажите еще один ответ. Можно ли шейпы располагать в своем порядке, а не в стандартном z-order? Или перемещать их внутри коллекции. Можно, конечно, и без этого обойтись. Но мне было бы удобно привязать конкретный шейп к конкретному индексу. А создаю я их не программно, а "руками".
 
из справки:
Цитата
A shape's position in the z-order corresponds to the shape's index number in the Shapes collection. For example, if there are four shapes on myDocument, the expression myDocument.Shapes(1) returns the shape at the back of the z-order, and the expression myDocument.Shapes(4) returns the shape at the front of the z-order.

Whenever you add a new shape to a collection, it’s added to the front of the z-order by default.
и еще:
Цитата
expression.ZOrder(ZOrderCmd)
ZOrderCmd Data Type: MsoZOrderCmd
Specifies where to move the specified shape relative to the other shapes.

MsoZOrderCmd can be one of these MsoZOrderCmd constants.
msoBringForward
msoBringInFrontOfText. Used only in Microsoft Word.
msoBringToFront
msoSendBackward
msoSendBehindText. Used only in Microsoft Word.
msoSendToBack

Use the ZOrderPosition property to determine a shape's current position in the z-order.
Соответственно, индекс в коллекции Shapes есть, но он показывает именно z-order этого Shape. Чтобы его проверить, смотрим у Shape свойство ZOrderPosition. Чтобы его изменить, гоняем Shape по коллекции при помощи метода ZOrder
Изменено: Максим Зеленский - 22 окт 2015 14:29:25
F1 творит чудеса
 
Умные люди, помогите!! Help!!


Здравствуйте!
меня очень заинтересовали  мини диаграммы, но к сожалению, мне необходимо их построить по четко заданным параметрам к примеру мне нужды данные только с "красным цветом" и разместить их с столбце G
  A     B     C     D     E     F     G  
  1     1     5     5     4     3     6  
  2     6     3     3     2     2     3  
  3     4     4     4     3     4     4  
  4     7     3     2     4     8     2  
  5     8     4     5     1     7     5  
  6     4     7     6     2     6     4  
  7     3     2     5     3     4     2  
Не могли бы обьяснить как сделать минидиаграммы с четко заданными параметрами
Thanks,
 
AnnaDiaz, а свою тему создать никак? Зачем свой вопрос разместили в теме, никак не связанной по тематике?  
Страницы: 1
Читают тему (гостей: 1)
Наверх