如果您在中间循环中删除并添加一个项目,则for循环如何循环显示槽中的项目?

时间:2019-06-22 18:12:01

标签: vba loops ms-word

我对此很纳闷,在单词2007上,它没有按我预期的那样工作,而在单词2016上,它却发挥了作用。让我来解释一下:

我有一个for循环

For i = ActiveDocument.Sections(1).Headers(1).Shapes.count To 1 Step -1

 if  ActiveDocument.Sections(1).Headers(1).Shapes(i) matches condition, then

ActiveDocument.Sections(1).Headers(1).Shapes(i).delete
set newshape = ActiveDocument.Sections(1).Headers(1).Shapes.Addpicture(new picture, bla, bla, bla..)

end if
next i

在这种情况下,循环是否会遇到新添加的形状,并使其循环通过?还是会忽略它?

要解决此问题,我很难将ActiveDocument.Sections(1).Headers(1).Shapes(i)设置为对象,并在插入新对象后将其在循环内删除。

  • 但是,如果我只是设置要删除不可见的那个怎么办?插入的那个会在循环中处理吗?

我还考虑过对所有要删除的形状进行收集,然后在收集物中循环以删除并添加新形状,以确保他不会对插入其中的形状进行循环

感谢您对此问题的见识

1 个答案:

答案 0 :(得分:0)

除了Cindy所说的那样,您的代码将更加高效,并且易于遵循:

With ActiveDocument.Sections(1).Headers(1)
  For i = .Shapes.Count To 1 Step -1
    If .Shapes(i) matches condition Then
      .Shapes(i).Delete
      Set newshape = .Shapes.AddPicture(new picture, bla, bla, bla)
    End If
  Next i
End With