VBA Word宏 - 在表的末尾插入表行会创建无限循环

时间:2015-11-10 18:51:30

标签: vba word-vba infinite-loop

我正在编写一组宏来格式化文档中的一系列表。部分原因是需要在每个表的末尾插入一个新行 - 但是,当我尝试使用For Each <table> in ActiveDocument.Tables时,它最终会在第一个表的底部插入无限数量的行。 这两个潜艇都将进入无限循环:

Sub insertBottomRow1()
    Dim theTable As Table
    Dim theNewRow As Row
    For Each theTable In ActiveDocument.Tables
        Set theNewRow = theTable.Rows.Add
        'Other row formatting
    Next theTable
End Sub

Sub insertBottomRow2()
    Dim theTable As Table
    Dim theNewRow As Row
    For Each theTable In ActiveDocument.Tables
        theTable.Rows.Last.Select
        Selection.InsertRowsBelow
        Set theNewRow = theTable.Rows.Last
        'Other row formatting
    Next theTable
End Sub

我有一个类似的子,它使用相同的结构在表的顶部插入一行,这不会进入无限循环。

Sub insertTopRow()
    Dim theTable As Table
    Dim theNewRow As Row
    For Each theTable In ActiveDocument.Tables
        Set theNewRow = theTable.Rows.Add(theTable.Rows.First)
        'Other row formatting
    Next theTable
End Sub

我已经做了一些实验(向添加的行添加计数器,并逐步调试调试器),崩溃的两个子似乎是重新选择第一个表而不是移动到下一个表。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

我不确定为什么你们每个人都会永远继续下去,但如果你遇到这样的问题,你可以很容易地将它转换成正常的for循环:

Sub insertTopRow()
    Dim theTable As Table
    Dim theNewRow As Row
    Dim i As Integer

    For i = 1 to ActiveDocument.Tables.Count
        Set theTable = ActiveDocument.Tables(i)
        Set theNewRow = theTable.Rows.Add(theTable.Rows.First)
        'Other row formatting
    Next i
End Sub

 Sub insertBottomRow()
    Dim theTable As Table
    Dim theNewRow As Row
    Dim i As Integer

    For i = 1 to ActiveDocument.Tables.Count
        Set theTable = ActiveDocument.Tables(i)
        Set theNewRow = theTable.Rows.Add
        'Other row formatting
    Next i
End Sub

您可能还想确认它是一个无限循环,您可以通过按Ctrl + Pause / Break来打破执行代码。

如果“其他行格式”对于顶行和底行相同,则另一个提示是组合这些函数。你可以创建一个布尔参数,并在'Set theNewRow ='行周围有一个if / else语句。