VBA Для каждого - порядок цикла - PullRequest
0 голосов
/ 29 апреля 2018

В VBA возможно проходить по фигурам. Например:

For Each shp In slide.Shapes
 shp.top=0
Next

Вопрос в том, какой параметр используется для определения порядка цикла и как этот параметр можно установить?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я нашел ответ на сайте MicroSoft:

Свойство Shape.ZOrderPosition (PowerPoint)

На сайте написано: " Позиция фигуры в z-порядке соответствует ее порядковому номеру в коллекции Shapes. ".

Затем я выполнил короткую процедуру сортировки, чтобы установить позицию z-порядка на основе параметра .top фигуры:

For i = 2 To sld.Shapes.Count
  If sld.Shapes(i).Top < sld.Shapes(i - 1).Top _ 
  and sld.Shapes(i).ZOrderPosition > sld.Shapes(i - 1).ZOrderPosition Then_
  sld.Shapes(i).ZOrder msoSendBackward
Next i
0 голосов
/ 29 апреля 2018

отредактировано после разъяснения О.П. о необходимости циклически проходить фигуры от самых высоких до самых низких

Вы можете использовать SortedList объект, использовать Shape Top свойство как ключ SortedList и сам объект Shape как его соответствующее значение:

Sub Main()
    Dim shp As Shape
    Dim j As Long

    With CreateObject("System.Collections.SortedList")
        For Each shp In slide.Shapes
            .Add shp.Top, shp
        Next

        For j = 0 To .Count - 1 'list shapes from the highest to the lowest
            MsgBox .GetByIndex(j).Name & " - " & .getkey(j)
        Next

    End With
End Sub
...