从包含合并单元格的表中删除范围

时间:2012-12-11 10:42:00

标签: vba ms-word word-vba

基本上,我要完成的是:从表格中的光标开始到表格末尾,从表格中删除所有行。

问题是这个表包含垂直合并的单元格,所以当我尝试做这样的事情时:

For i = Selection.Tables(1).Rows.Count To Selection.Cells(1).RowIndex Step -1
    Selection.Tables(1).Rows(i).Delete
Next

它抱怨无法访问单个行,因为该表包含垂直合并的单元格。

我还尝试先选择范围,然后删除选择。但我无法正确定义范围;它总是抱怨参数定义不正确。

2 个答案:

答案 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解决方案时添加一个答案,但它不能用于我的表:

Table Screenshot

注意我在第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

不知道是否有其他人遇到过类似的问题,但我想我会把答案放在这里,万一有人这样做。 :)