Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从包含合并单元格的表中删除列_Vba_Vsto_Ms Word - Fatal编程技术网

Vba 从包含合并单元格的表中删除列

Vba 从包含合并单元格的表中删除列,vba,vsto,ms-word,Vba,Vsto,Ms Word,我试图从具有水平合并单元格的表中删除列 Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3 Selection.Columns.Delete 即使列被删除,合并的单元格也会在删除过程中被删除,留下一个损坏的表 几乎类似的删除行的方法可以很好地工作,如本文所述 解决方法 我在做这样的工作 Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3 Selection.MoveDown Unit:=WdUnit

我试图从具有水平合并单元格的表中删除列

Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3
Selection.Columns.Delete

即使列被删除,合并的单元格也会在删除过程中被删除,留下一个损坏的表

几乎类似的删除行的方法可以很好地工作,如本文所述

解决方法

我在做这样的工作

Selection.MoveEnd Unit:=WdUnits.wdCell, Count:=3
Selection.MoveDown Unit:=WdUnits.wdLine, Count:=2, Extend:=wdExtend
Selection.Cells.Delete
然后将索引1,2处的单元格宽度设置为表的其余行。这样可以避免删除合并的单元格。

这样就可以了

Sub DeleteCols()
    Dim Col2Delete As Range
    Set Col2Delete = Selection.EntireColumn
    Col2Delete.Delete
End Sub

单词表并不总是直观的。如果单元格跨越要删除的列,则整个跨越的单元格将始终被删除,如您所示

当我不使用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)

现在,我们应该选择一个从第二个单元格开始到最后一个单元格结束的范围

最后,删除选择列

        Set Rng = Tbl.Range.Cells(2).Range
        Rng.End = Tbl.Range.Cells(Tbl.Range.Cells.Count).Range.End
        Rng.Select
        Selection.Columns.Delete

重要问题-要删除哪列(多少列)?从第一张图片中的选定单元格中删除3列。您的解决方法非常好。我想不出比这更好的了。单词表中没有EntireClum。我相信这只是一个Excel函数。