我正在尝试从具有水平合并单元格的表中删除列
Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3
Selection.Columns.Delete
尽管列被删除,但在此过程中删除合并的单元格会留下损坏的表格。
几乎类似的删除行方法可以正常工作,如本answer
中所述解决方法
我正在做这样的事情作为解决方法
Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3
Selection.MoveDown Unit:=WdUnits.wdLine, Count:=2, Extend:=wdExtend
Selection.Cells.Delete
然后将索引1,2处的Cell宽度设置为表行的其余部分。这样就可以避免合并单元格被删除。
答案 0 :(得分:1)
Word表并不总是直观的。如果单元格跨越要删除的列,则将始终删除整个跨区单元格,如图所示。
当我不使用VBA时,我总是在删除行或列之前取消合并单元格;否则,Word的行为很难预测。
使用VBA我建议如下:
'splits the header row of the current table into 7 cells
Selection.tables(1).cell(1,2).split numrows:=1, numcolumns:=7
'your code to delete columns
Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3
Selection.Columns.Delete
'merge the header row back into one span
ActiveDocument.Range( _
start:= Selection.tables(1).cell(1,2).range.start, _
end := Selection.tables(1).cell(1,5).range.end _
).cells.Merge
或更常规的方法,删除n列:
width = Selection.tables(1).columns.count - 1
Selection.tables(1).cell(1,2).split numrows:=1, _
numcolumns:= width - 1
Selection.MoveEnd Unit:=WdUnits.wdCell, Count:= n
Selection.Columns.Delete
ActiveDocument.Range( _
start:= Selection.tables(1).cell(1,2).range.start, _
end := Selection.tables(1).cell(1,width-n-1).range.end _
).cells.Merge
答案 1 :(得分:0)
这应该这样做
Sub DeleteCols()
Dim Col2Delete As Range
Set Col2Delete = Selection.EntireColumn
Col2Delete.Delete
End Sub
答案 2 :(得分:0)