【问题标题】:Inconsistent looping behaviours of For loop in vbavba中For循环的循环行为不一致
【发布时间】:2011-05-11 22:03:42
【问题描述】:

我编写了一个用于删除 MS Word 2010 页面的宏,如下所示-

Sub deleteAlternatePages()
    CurrentPage = Selection.Information(wdActiveEndPageNumber)
    TotalPages = Selection.Information(wdNumberOfPagesInDocument)

    maxLoop = TotalPages - 1

    Dim loopCtr As Integer
    loopCtr = (maxLoop / 2)

    For i = 1 To loopCtr
        boolDelete = Selection.Information(wdActiveEndPageNumber)
        Call deleteOnePage
        CurPage = Selection.Information(wdActiveEndPageNumber)
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Count:=1
    Next

End Sub

当我从 word 运行宏时,循环无法正常工作。但是,在我调试代码时可以正常工作。

【问题讨论】:

  • 当你说循环不能正常工作时,究竟发生了什么不应该发生的事情?
  • 直到计数器的最大值和最后的一些页面离开时,循环才完成。

标签: vba loops ms-word


【解决方案1】:

这只是一种预感,但我敢打赌您正在删除您不打算删除的页面?不是向上循环,而是向后循环

 For i =loopCtr to 1 step -1

在您的循环中,如果您删除了一个页面,则其余页面将向上移动一个页面,并且在您继续向前检查时将具有不正确的页码。如果你先从最后删除,前面的页面就不会乱了

【讨论】:

  • +1 从 VBA 中的集合中删除时,您必须始终向后循环或使用对象名称,因为在您删除时集合会发生变化。
猜你喜欢
  • 1970-01-01
  • 2021-07-30
  • 2023-03-18
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2014-09-21
相关资源
最近更新 更多