每个循环顺序的VBA
在VBA中,可以在形状之间循环。例如:每个循环顺序的VBA,vba,for-loop,each,shape,Vba,For Loop,Each,Shape,在VBA中,可以在形状之间循环。例如: For Each shp In slide.Shapes shp.top=0 Next 问题是,哪个参数用于确定循环的顺序,以及如何设置该参数?在OP澄清了他需要从最高到最低循环形状后编辑 您可以使用SortedList对象使用ShapeTop属性作为SortedList键,使用Shape对象本身作为其对应值: Sub Main() Dim shp As Shape Dim j As Long With CreateObjec
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
我在MicroSoft网站上找到了答案: 网站上说“形状在z顺序中的位置对应于形状集合中形状的索引号。” 然后,我执行了一个简短的排序例程,根据形状的.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
i=2到sld.Shapes.Count的
如果sld.Shapes(i).Topsld.Shapes(i-1).ZOrderPosition_
sld.Shapes(i).ZOrder msoSendBackward
接下来我
在Cymro,我的回答是“很可能是他们的出现顺序”,我可以从我的一些测试中证明这一点。也许我应该明确指出,我所说的出现顺序,是指它们出现的顺序created@Cymro,请参见编辑后的答案,以从最高到最低的形状循环。如果答案中已包含句柄,即:。GetByIndex(j)。因此,您可以键入:For j=0 to.count-1:MakeBold.GetByIndex(j):next。您可以考虑将答案标记为“接受”,谢谢您,如果有2个对象具有相同的垂直位置,则代码失败,这个错误“项目已经被添加”。任何帮助都将不胜感激。