gpt4 book ai didi

vba - 删除工作表/图表事件 VBA

转载 作者:行者123 更新时间:2023-12-02 19:21:26 25 4
gpt4 key购买 nike

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

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

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

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

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

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

这在工作表上效果很好,但在图表(仅包含图表的工作表)上不起作用。

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

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

任何帮助将不胜感激。

最佳答案

看起来是一个实现疏忽,这个事件应该按照设计来实现。事实上,Sheets 集合是 WorksheetsCharts 集合的并集。由于事件的名称是 Workbook_SheetBeforeDelete(而不是 Workbook_WorksheetBeforeDelete),常识表明该事件应该应用于所有 Sheets,即, 工作表图表

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

我们可以向 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

关于vba - 删除工作表/图表事件 VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42156969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com