是否有任何事件触发了工作表删除和添加? 我试过
Private Sub Workbook_NewSheet(ByVal Sh As Object)
End Sub
但是此事件仅在我添加工作表时才有效。就我而言,我需要一些东西来同时在添加和删除中工作。
任何帮助将不胜感激。
这是另一种方式
逻辑:
- 在删除工作表之前,计算工作簿中的工作表数
- 激活工作表后,检查工作簿中的工作表数
代码:
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
时,存在问题。对于这些情况,您可以使用此处的建议。