是否存在任何在工作表删除和添加时触发的事件?我尝试过
Private Sub Workbook_NewSheet(ByVal Sh As Object)
End Sub
但是此事件仅在我添加工作表时有效。就我而言,我需要在“添加和删除”中都可以使用。
任何帮助都会感激。
答案 0 :(得分:3)
这是另一种方式
逻辑:
代码:
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。