我有一个长宏,可以跳到不同的书签并从所选表中删除列。 这是我的宏中的一个示例:
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栏仍然很大。
答案 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