我试图在删除工作表(Excel)时触发宏。
自 2010 年以来,出现了不同的删除事件:
应用程序级别:Application.SheetBeforeDelete 事件。
工作簿级别:Workbook.SheetBeforeDelete 事件。
工作表级别:Worksheet.BeforeDelete 事件。
作为初学者,我无法很好地应用后两个,但我尝试应用第一个。
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
Call Macro
End Sub
这在工作表上效果很好,但在图表(仅包含图表的工作表)上不起作用。
我的目标是调整计数器并可能重命名工作表,因为我的工作表被命名为 Sheetname(1),..(2).. 并且用户经常删除工作表。
我搜索了很多,但找不到任何可以遵循的例子。
任何帮助将非常感激。
看来是执行疏忽了,这个事件本来应该按照设计执行的。事实上,Sheets
集合是Worksheets
and Charts
收藏。由于活动的名称是Workbook_SheetBeforeDelete
(not Workbook_WorksheetBeforeDelete
),常识表明该事件应该适用于所有Sheets
,即两者Worksheets
and Charts
.
请注意,其他事件,例如Workbook_SheetDeactivate
为图表和工作表引发。这确认了错误,但也建议了一种解决方法,即利用Workbook_SheetDeactivate
event.
我们可以添加两个过程ThisWorkbook
代码模块。checkChartDelete()
检查图表是否已被删除并启动适当的操作。需要通过调用Application.OnTime
,因此它通过静态变量获取其参数chartNameToCheck
.
' Code Module ThisWorkbook
Option Explicit
Private chartNameToCheck As String
Private Sub checkChartDelete()
On Error Resume Next
Dim x: Set x = Sheets(chartNameToCheck)
If Err.Number <> 0 Then
'**********************************************
' call or do here the action on chart deleted '
'**********************************************
MsgBox "chart deleted: " & chartNameToCheck
End If
chartNameToCheck = ""
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If TypeName(Sh) <> "Chart" Then Exit Sub
chartNameToCheck = Sh.name
Application.OnTime Now, "ThisWorkbook.checkChartDelete"
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)