手动删除工作表时禁用警报

手动删除工作表时禁用警报

在 VBA 中是否有方法可以禁用手动删除工作表(右键单击工作表并删除)时弹出的警报?我已经看到Application.DisplayAlerts = False,但是,这似乎仅在使用 VBA(Sheets("Sheet1").delete)删除工作表时对我有用。我试图禁用手动右键单击工作表并单击删除时整个工作簿的警报。

作为该问题的背景介绍,我试图消除在会议上展示工作簿时确认删除工作表的需要。在浏览工作表时,我经常双击数据透视表来查看详细信息,并且我想消除删除生成的工作表时弹出的警报。禁用警报需要在 VBA 中发生,因为需要在进入或退出演示视图时自动打开和关闭它。

答案1

没有任何命令、选项或方法可以停止“Excel 警报/警告消息”。

甚至“Application.DisplayAlerts = False”在通过 VBE 中的立即窗口使用时也不起作用。唯一的方法是使用 VBA 脚本。

因此,下面编写的代码可以用作您想要删除而无需确认消息的工作表的模块。

Option Explicit

Sub Delete_without_warning()

 Dim i As Long

Application.DisplayAlerts = False

For i = 1 To Worksheets.Count
If Worksheets(i).Name Like "Sheet5" Then Worksheets(i).Delete
Next i

Application.DisplayAlerts = True

End Sub

笔记:如果您想要删除多个 Sheet,请使用通配符方法并将命令行 6 替换为以下内容:

如果工作表 (i). 名称类似于“数据 *”,则工作表 (i). 删除

Excel 将在没有警告的情况下删除所有名称以此名称开头的工作表数据

答案2

如果仅通过双击数据透视表即可创建新工作表,这可能是一个合适的解决方案

放置在ThisWorkbook,下面的代码将在移动到另一张表后删除任何新表


Option Explicit

'Place this code in ThisWorkbook module

'Expects that all new sheets are generated by double-clicking a pivot table

Private pivotWs As Worksheet

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Set pivotWs = Sh
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If Not pivotWs Is Nothing Then
        If Sh.Name = pivotWs.Name Then
            Application.DisplayAlerts = False
            pivotWs.Delete
            Set pivotWs = Nothing
            Application.DisplayAlerts = True
        End If
    End If
End Sub

相关内容