删除/添加工作表事件 - VBA



是否有任何事件触发了工作表删除和添加? 我试过

Private Sub Workbook_NewSheet(ByVal Sh As Object)
End Sub

但是此事件仅在我添加工作表时才有效。就我而言,我需要一些东西来同时在添加和删除中工作。

任何帮助将不胜感激。

这是另一种方式

逻辑:

  1. 在删除工作表之前,计算工作簿中的工作表数
  2. 激活工作表后,检查工作簿中的工作表数

代码

Dim PreviousWorksheetCount As Integer
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim CurrentWorksheetCount As Integer
    CurrentWorksheetCount = ThisWorkbook.Sheets.Count
    If CurrentWorksheetCount < PreviousWorksheetCount Then
        MsgBox "Sheet was deleted"
    End If
End Sub
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
    PreviousWorksheetCount = ThisWorkbook.Sheets.Count
End Sub

这里是删除工作表事件。

将此代码放在标准代码模块中

Public shName As String
Sub Deletesheet()
    Dim oWS As Object
    On Error Resume Next
    Set oWS = Sheets(shName)
    If oWS Is Nothing Then
        MsgBox shName & " has been deleted"
    End If
End Sub

把它放在这个工作簿中

Private Sub Workbook_SheetDeactivate(ByVal sh As Object)
    shName = sh.Name
    Application.OnTime Now + TimeSerial(0, 0, 1), "DeleteSheet"
End Sub

没有单个事件可以捕获添加(Workbook.NewSheet(或删除(Workbook.SheetBeforeDelete(。但是,您可以分别检测这两个事件,并为这两个事件运行相同的代码段。

为了能够在工作表删除运行代码,可以使用计时器来允许进行删除。更好的是,您可以设置一个等待循环来计算工作簿中的工作表数,并且仅在删除完成后的工作表数达到预期数量时才退出。然后执行预期的代码。

请注意,当删除的工作表是Chart时,存在问题。对于这些情况,您可以使用此处的建议。

最新更新