【发布时间】:2019-07-24 19:29:13
【问题描述】:
我有一个使用宏并制作许多工作表的工作簿。在一张名为“粘贴”的工作表之后,我希望能够在使用完之后删除随后的工作表。
我从https://stackoverflow.com/a/53544169/11615632 中找到了以下代码,并对其稍作修改以在我的工作簿中使用。
Sub Deleting()
Dim Indx As Long
Dim x As Long
With ThisWorkbook
On Error Resume Next
Indx = .Sheets("Paste").Index
On Error GoTo 0
If Indx <> 1 Then
If .Sheets.Count > 2 And Indx < .Sheets.Count Then
Application.DisplayAlerts = False
For x = .Sheets.Count To Indx + 1 Step -1
.Sheets(x).Delete
On Error GoTo 0
Next x
Application.DisplayAlerts = False
End If
Elseif Indx = 1 Then
Exit Sub
End If
End With
End Sub
但是,当我这样做时,它实际上有效,但是我收到一条错误消息说
“运行时错误'-2147319765':
自动化错误
未找到元素。
在.Sheets(x).Delete这一行发现错误
【问题讨论】:
-
错误在哪一行?
-
我很抱歉...现在添加它
-
仅供参考,它是
ElseIf,而不是Else If。此外,如果您的工作簿没有名为“粘贴”的工作表,则第一个If语句仍将运行(Indx这里是0)。我认为这是正确的,也是您想要的……最后,请确保您的For循环不会尝试删除剩余的单个工作表。 -
考虑
Indx = 0时会发生什么。 -
为什么不遍历工作表并像
Dim ws as Worksheet / For each ws in Thisworkbook.Worksheets / If ws.Name <> "Paste" and ws.Name <> "Value" Then ws.Delete / Next ws一样做呢? (这是一种解决方法,因为我不知道为什么您仍然会收到该错误...)
标签: excel vba error-handling automation