Страницы: 1
RSS
не совпадает zorder в цикле
 
Здравствуйте. Давно мучаюсь с shapes. До сих пор для меня трудности вызывает проблема к ним обращаться. Самая беда когда есть одноименные фигуры.
Вопрос по циклу
Код
Sub test()
    For Each p In Sheets("Лист1").Shapes
          nnn = ActiveSheet.Shapes.Range(p.Name).ZOrderPosition
          nn = p.ZOrderPosition 'почему номера не совпадают?
    
    If nnn <> nn Then
    Debug.Print p.Name
    End If
    Next p
End Sub

Почему не совпадают номера?
И как например  сделать что либо(выделить,удалить....)  с фигурой zv1, находящейся в группе и наоборот? Как к ним обращаться правильно?
 
Когда Вы пытаетесь обратиться по имени, EXCEL из коллекции возвращает первое, что соответствует этому имени. Поэтому именно для второго (да и любого последующего) объекта  с повторяющимся именем такой трюк даст разные ZOrderPosition.
Либо давать всем Shape разные имена, либо обращаться к ним через Shapes(INDEX), где INDEX - номер в коллекции. Для второго с именем rrr INDEX=5, ZOrderPosition=7, а когда Вы пытаетесь к нему обратиться через имя, то получаете ZOrderPosition первого элемента, и для него ZOrderPosition=1.

Теперь с группами.
Проверить: является ли Shape группой можно так:
Код
If p.Type = msoGroup Then
Обращаться к внутренним элементам группы можно так:
Код
p.GroupItems(INDEX)
где INDEX - номер внутри группы, либо вместо INDEX по имени (но только если и тут дубли имен, то до второго с таким же именем так не достучитесь)
Следствие из третьего закона Чизхолма:
"Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
 
Спасибо вам за помощь. Ваш ответ очень мне помог.
 
Хотел бы еще кое что узнать. А как быть в случае, если в группе есть ещё одна группа в которой лежат фигуры.Как тогда обращаться ко 2 уровню ? А к 3-му?
Страницы: 1
Наверх