删除工作表/图表事件VBA

时间:2017-02-10 10:24:20

标签: excel vba excel-vba events

我正在尝试在删除工作表(Excel)时触发宏。 自2010年以来,有不同的删除事件:

应用程序级别:Application.SheetBeforeDelete事件。

工作簿级别:Workbook.SheetBeforeDelete事件。

工作表级别:Worksheet.BeforeDelete事件。

作为初学者,我无法应用最后两个,但是我尝试应用第一个。

Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object) 
Call Macro
End Sub

这适用于工作表,但它不适用于图表(仅包含图表的工作表)。

我的目标是调整我的计数器并可能重命名工作表,因为我的工作表名为Sheetname(1),..(2)..并且用户经常删除工作表。

我搜索了很多,但我找不到任何可以遵循的例子。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这看起来像是一个实施疏忽,这个事件应该根据设计实施。实际上,Sheets集合是WorksheetsCharts集合的并集。由于活动的名称为Workbook_SheetBeforeDelete(不是Workbook_WorksheetBeforeDelete),因此常识表明该活动应适用于所有Sheets,即Worksheets和{{1} }}

请注意,图表和工作表都会引发其他事件,例如Charts。这确认了错误,但也通过利用Workbook_SheetDeactivate事件建议了解决方法。

我们可以向Workbook_SheetDeactivate代码模块添加两个过程。 ThisWorkbook检查图表是否已被删除并启动相应的操作。它需要通过checkChartDelete()调用,因此它通过静态变量Application.OnTime获取其参数。

chartNameToCheck