我正在尝试在删除工作表(Excel)时触发宏。 自2010年以来,有不同的删除事件:
应用程序级别:Application.SheetBeforeDelete事件。
工作簿级别:Workbook.SheetBeforeDelete事件。
工作表级别:Worksheet.BeforeDelete事件。
作为初学者,我无法应用最后两个,但是我尝试应用第一个。
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
Call Macro
End Sub
这适用于工作表,但它不适用于图表(仅包含图表的工作表)。
我的目标是调整我的计数器并可能重命名工作表,因为我的工作表名为Sheetname(1),..(2)..并且用户经常删除工作表。
我搜索了很多,但我找不到任何可以遵循的例子。
非常感谢任何帮助。
答案 0 :(得分:2)
这看起来像是一个实施疏忽,这个事件应该根据设计实施。实际上,Sheets
集合是Worksheets
和Charts
集合的并集。由于活动的名称为Workbook_SheetBeforeDelete
(不是Workbook_WorksheetBeforeDelete
),因此常识表明该活动应适用于所有Sheets
,即Worksheets
和{{1} }}
请注意,图表和工作表都会引发其他事件,例如Charts
。这确认了错误,但也通过利用Workbook_SheetDeactivate
事件建议了解决方法。
我们可以向Workbook_SheetDeactivate
代码模块添加两个过程。 ThisWorkbook
检查图表是否已被删除并启动相应的操作。它需要通过checkChartDelete()
调用,因此它通过静态变量Application.OnTime
获取其参数。
chartNameToCheck