我正在编写一组宏来格式化文档中的一系列表。部分原因是需要在每个表的末尾插入一个新行 - 但是,当我尝试使用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
我已经做了一些实验(向添加的行添加计数器,并逐步调试调试器),崩溃的两个子似乎是重新选择第一个表而不是移动到下一个表。
任何帮助将不胜感激。谢谢。
答案 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语句。