基本上,我要完成的是:从表格中的光标开始到表格末尾,从表格中删除所有行。
问题是这个表包含垂直合并的单元格,所以当我尝试做这样的事情时:
For i = Selection.Tables(1).Rows.Count To Selection.Cells(1).RowIndex Step -1
Selection.Tables(1).Rows(i).Delete
Next
它抱怨无法访问单个行,因为该表包含垂直合并的单元格。
我还尝试先选择范围,然后删除选择。但我无法正确定义范围;它总是抱怨参数定义不正确。
答案 0 :(得分:2)
VBA后面的合并表单元格是不是很痛苦? Word似乎与列和行计数混淆。对于水平或垂直合并单元格的任何组合,以下似乎非常强大。
Sub DeleteRows()
Selection.MoveDown Unit:=wdLine, Count:=(Selection.Tables(1).Rows.Count - Selection.Cells(1).RowIndex), Extend:=wdExtend
Selection.Rows.Delete
End Sub
答案 1 :(得分:0)
我想在我尝试使用CuberChase解决方案时添加一个答案,但它不能用于我的表:
注意我在第1,2和5列中有垂直合并的行。当我实现Selection.MoveDown
时,意图选择父级中的所有行" A3"在行中,它无法识别第3列和第4列中的内部行。而是选择了父级" A4"," A5"和" A6"行(与A3格式相同),不选择任何内部行。
以下是我最终要成功删除表格中的父行和子行的操作。我首先必须收集每行中第一个单元格的索引以删除到数组中。我颠倒了我的数组,以便从下到上工作,以免在运行时改变索引。
然后我遍历我的反转数组,选择属于每个父行的单元格范围,并删除与我的选择相关联的行。
table = ActiveDocument.Tables(1)
For Each idx In ReverseArray
cells_to_delete = ActiveDocument.Range(Start=table.Range.Cells(idx).Range.Start, End=table.Range.Cells(idx+*count_of_cells*).Range.End)
cells_to_delete.Select
Selection.Range.Rows.Delete
Next idx
不知道是否有其他人遇到过类似的问题,但我想我会把答案放在这里,万一有人这样做。 :)