4

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

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

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

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

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

4

2 回答 2

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
于 2012-12-11T11:34:15.577 回答
0

当我尝试 CubeChase 解决方案时,我想添加一个答案,但它不适用于我的表:

表格截图

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

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

于 2015-07-09T23:59:45.680 回答