快速批量删除工作表

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/taller_2000/article/details/79824740

前言

删除工作表是VBA代码开发过程中经常用到的操作,一行代码就可以完成,这有啥可讲的呢!?代码一执行,是否就看到下面这个令人烦的窗口跳出来了。

此时,你就不得不点击【删除】按钮确认才可以删除工作表,如果要批量删除多个工作表,那么就需要不停的点击按钮,VBA代码实现自动化操作的目的就无法实现。

解决方案

Excel为了避免用户的误操作,每次删除工作表都会给出提示信息,用户确认后才会执行删除操作,这个机制是Excel的安全机制,无法取消。但是可以利用系统设置屏蔽这个提示信息,以实现无人干预的自动化操作。为了方便调用,将代码封装成独立的过程。

Sub DelSheets(vShtName, Optional sWkName As String)
    Dim sName
    With Application
        .DisplayAlerts = False
        On Error Resume Next
        If Len(sWkName) > 0 Then
            Set objWk = ActiveWorkbook
        Else
            Set objWk = Workbooks(sWkName)
        End If
        If VBA.IsArray(vShtName) Then
            For Each sName In vShtName
                objWk.Sheets(sName).Delete
            Next
        Else
            objWk.Sheets(sShtName).Delete
        End If
        On Error GoTo 0
        .DisplayAlerts = True
    End With
End Sub

DelSheets过程有两个参数:

  • vShtName是必选参数,用于指定需要删除的工作表名称, 可以单个工作表,也可以是多个工作表名称组成的数组。
  • sWkName是可选参数,用于指定工作表所隶属的工作簿。
    调用代码如下:
'删除单个工作表
Call DelSheets("Sheet1")
'删除多个工作表
Call DelSheets(Array("Sheet1","Sheet3","Sheet3"))

代码解析

此过程的核心代码如下:

Application.DisplayAlerts = False
On Error Resume Next

第一行代码禁止显示系统告警信息,删除工作表时就不会出现提示对话框,在过程结束前,需要回复系统设置Application.DisplayAlerts = True
第二行代码忽略系统错误,也就是忽略删除工作表可能产生的异常错误,在过程结束前,需要回复系统设置On Error GoTo 0

VBA.IsArray(vShtName)用于判定参数vShtName是否是数组。

  • 如果vShtName是数组,则返回值为True,属于批量删除工作表。For Each sName In vShtName遍历数组中的元素(工作表名称),然后逐个删除。
  • 如果vShtName不是数组,那么就是单个工作表名称,可以直接进行删除操作。

猜你喜欢

转载自blog.csdn.net/taller_2000/article/details/79824740