Когда приведенный ниже код достигает инструкции .Delete, он входит в бесконечный цикл.При остановке в диспетчере задач отображается сообщение об ошибке «Ошибка автоматизации».При нажатии кнопки «Отладка» в сообщении об ошибке строка .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
Код вызывается в проекте VBA, встроенном в MS Word.Приложение Excel вызывается правильно и доступно.Рабочий лист существует и доступен на момент возникновения ошибки.Я попытался заменить строку полным именем объекта, Wb.Worksheets (LibWs.Name) .Delete, с тем же результатом.Я попытался удалить ListObject перед удалением листа.Таблица была удалена, но такая же ошибка произошла в следующей строке.Аналогичный код, запускаемый из автономного приложения Excel, работает отлично, даже если удаленный лист является активным.Интересно, стоит ли сохранять рабочую книгу перед удалением листа, но я не знаю, почему это должно иметь значение.Любые идеи, что я мог бы сделать?