使用VBA从Word中删除表中的列

时间:2019-02-08 11:20:51

标签: vba ms-word

我有一个长宏,可以跳到不同的书签并从所选表中删除列。 这是我的宏中的一个示例:

If ActiveDocument.Bookmarks.Exists("ProposedOverallObj") = True Then
ActiveDocument.Bookmarks.Item("ProposedOverallObj").Select
Call ApproveProposedOverallObj
End If

,然后调用的宏是:

Sub ApproveProposedOverallObj()

Selection.Cut
Selection.GoTo What:=wdGoToBookmark, Name:="Objectives"
With ActiveDocument.Bookmarks
    .DefaultSorting = wdSortByName
    .ShowHidden = False
End With
Selection.PasteAndFormat (wdPasteDefault)
Selection.Tables(1).Columns(5).Delete
Selection.Tables(1).Columns(4).Delete
Selection.Tables(1).Columns(3).Delete
Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=600.5, RulerStyle:= _
    wdAdjustFirstColumn
End If
End Sub 

有时候这些运行正常,有时它们会出错,并且我得到一个错误:

  

“运行时错误'5825':对象已删除。

基本上,它删除第5列和第3列,然后发出错误,并说“我不能删除第3列,因为它已被删除”,但是...没有。第3栏仍然很大。

1 个答案:

答案 0 :(得分:0)

错误可能出在Select中-通常在VBA中不是很可靠- How to avoid using Select in Excel VBA

根据经验,尽可能将对象分配给变量并对其进行引用:

Sub TestMe()

    Dim myTable As Table
    Set myTable = ThisDocument.Tables(1)
    MsgBox "First table has " & myTable.Columns.Count & " columns."

    If myTable.Columns.Count >= 5 Then
        With myTable
            .Columns(5).Delete
            .Columns(4).Delete
            .Columns(3).Delete
        End With
    Else
        MsgBox "Not enough columns!"
    End If

End Sub