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

时间:2019-04-03 08:05:07

标签: excel vba

是否存在任何在工作表删除和添加时触发的事件?我尝试过

Private Sub Workbook_NewSheet(ByVal Sh As Object)
End Sub

但是此事件仅在我添加工作表时有效。就我而言,我需要在“添加和删除”中都可以使用。

任何帮助都会感激。

3 个答案:

答案 0 :(得分:3)

这是另一种方式

逻辑

  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

答案 1 :(得分:2)

这是一个删除工作表的事件。

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

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

将此内容放入ThisWorkbook

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

答案 2 :(得分:1)

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

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

请注意,当删除的工作表为Chart时会出现问题。 对于这些情况,您可以使用建议here