【发布时间】:2018-10-09 22:42:18
【问题描述】:
在 VBA 中,可以循环遍历形状。例如:
For Each shp In slide.Shapes
shp.top=0
Next
问题是,使用哪个参数来确定循环的顺序以及如何设置这个参数?
【问题讨论】:
在 VBA 中,可以循环遍历形状。例如:
For Each shp In slide.Shapes
shp.top=0
Next
问题是,使用哪个参数来确定循环的顺序以及如何设置这个参数?
【问题讨论】:
在 OP 澄清他需要从最高到最低循环遍历形状后编辑
您可以使用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
【讨论】:
我在微软网站上找到了答案:
Shape.ZOrderPosition Property (PowerPoint)
网站说“形状在 z 顺序中的位置对应于形状在 Shapes 集合中的索引号。”。
然后我做了一个简短的排序例程,根据形状的 .top 参数设置 z 顺序位置:
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
【讨论】: