2012-12-11 85 views
4

基本上,我試圖完成的是:從表中刪除所有行,從表中的光標所在的位置開始刪除所有行。從合併單元格的表中刪除一個範圍

的問題是,該表包含垂直合併的細胞,所以當我嘗試做這樣的事情:

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

它抱怨說,各行不能訪問,因爲表包含垂直合併單元格。

我也嘗試先選擇範圍,然後刪除選擇。但我無法正確定義範圍定義;它總是抱怨說有一個定義不正確的參數。

回答

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 
+0

正是我所需要的,謝謝! – Setsu

+0

得到錯誤5991 ....因爲垂直合併的單元格。 –

+0

@Totty你有什麼表格佈局?我已經嘗試過使用垂直和水平合併的絕對組合,並且無法讓它失敗一次。 – CuberChase

0

我想添加一個答案,我試圖CuberChase解決方案,但它並沒有與我的工作表中:在列1,2和5

Table Screenshot

通知我已垂直合併行。當我實現了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 

不知道其他人是否遇到類似的問題,但我想我會把答案放在這裏以防萬一有人這樣做。 :)

相關問題