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

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

他の誰かが同様の問題に遭遇したかどうかはわかりませんが、誰かが遭遇した場合に備えて、ここに答えを載せると思いました。:)

于 2015-07-09T23:59:45.680 に答える