如何从MS Word中删除调用代码的工作表



当下面的代码到达.Delete指令时,它将进入一个无休止的循环。当在任务管理器中停止时,会显示一条错误消息"Automation error"。当按下错误消息中的"调试"按钮时,.Delete行将突出显示。工作表未被删除。不会显示警报消息。

Sub DeleteXlTable(Wb As Workbook, _
Frm As fTextLib)
' SSY 047 ++ 30 Dec 2018
Dim LibWs As Worksheet
Dim Rng As Excel.Range
'    Application.DisplayAlerts = False
Set LibWs = SetLibWs(Wb, Frm)
With LibWs
If .ListObjects.Count = 1 Then
If Wb.Worksheets.Count = 1 Then
With .UsedRange
.Columns.Delete
.Rows.RowHeight = 12.75
End With
.Name = "Sheet1"
Else
.Delete
End If
Else
Set Rng = .ListObjects(Frm.CbxTbl.Text).Range
Do While Rng.Row > NwsFirstLibRow
If Not .Cells(Rng.Row - 1, NwsKey).ListObject Is Nothing Then Exit Do
Set Rng = Rng.Offset(-1).Resize(Rng.Rows.Count + 1)
Loop
Rng.Rows.EntireRow.Delete
End If
End With
Application.DisplayAlerts = True
End Sub

该代码是在嵌入MS Word的VBA工程中调用的。Excel应用程序调用正确且可用。工作表存在,并且在发生错误时可以访问。我试着用完整对象的名称Wb.Worksheets(LibWs.name).Delete替换这一行,结果相同。在删除工作表之前,我尝试删除ListObject。该表已被删除,但下一行也出现了同样的错误。即使删除的工作表是活动的,从独立的Excel应用程序运行的类似代码也能完美工作。我想知道是否应该在删除工作表之前保存工作簿,但不知道为什么会有不同。有什么想法吗?

根据我们之前的对话,Excel中的警报似乎导致了问题。

添加:

Wb.Parent.DisplayAlerts = False

其中:

Application.DisplayAlerts = False

被评论掉了。

最新更新