使用VBA从单词表中删除列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用VBA从单词表中删除列相关的知识,希望对你有一定的参考价值。

我有一个很长的宏跳转到不同的书签并删除所选表中的列。这是我的宏的一个例子:

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列仍然非常多。

答案

可能错误在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

以上是关于使用VBA从单词表中删除列的主要内容,如果未能解决你的问题,请参考以下文章

在VBA中将行从工作表复制和删除到多个工作表

vba,如何从列表框中的工作表中删除过滤后的数据

获取从VBA中的段落获得的行的第一个单词的索引号

使用 VBA 将 Excel 重命名为 CSV

VBA自动过滤复制值,去重并粘贴到其他工作表中

我想知道如何运行 vba 脚本来查找和替换仅在一张工作表中而不是整个工作组中的多个单词?