Excel中提示删除工作表



我正在写一个excel插件。我想在我的代码中有一个功能,这样当我右键单击Active工作簿中的工作表选项卡并单击删除时。。我可以弹出一条自定义消息并捕获对话框的返回值,根据是或否,我可以决定是否应该继续删除工作表?请帮忙。

遗憾的是,没有处理"图纸删除"事件的特定事件。话虽如此,我可以想到三种选择,但三种都有自己的cons

选项1

此方法涉及保护工作簿结构。这将禁止用户删除任何工作表。如果他们想删除图纸,必须通过外接程序中的选项进行删除。也许是一个按钮?

缺点:保护每个工作簿的结构不实用。但是如果你想要一个特定工作簿的功能,那么这是最好的方法

选项2

此方法包括创建temp工作表并将其隐藏在活动工作簿中。临时工作表在工作簿打开时创建,在工作簿关闭时删除。每次激活工作表时,活动工作表中的数据都会复制到临时工作表中,这样,如果用户删除了不需要的工作表,您就可以随时恢复它。我们之所以采取这种方法,是因为UnDo无法恢复已删除的工作表。

此外,当添加或删除图纸时,某些图纸也会被激活。因此,我们将使用Workbook_SheetActivate事件,以便检查工作表计数,并得出是否删除或添加了工作表的结论。

下面是我编写的示例代码,用于演示它的工作原理。你可以简单地增强它以满足你的需求。

Const wsTempName As String = "MyAddinTempSheet"
Dim wsTemp As Worksheet
Dim TempSheetCount As Long
Dim boolFirst As Boolean
Private Sub Workbook_Open()
    boolFirst = True
    Set wsTemp = ThisWorkbook.Sheets.Add
    wsTemp.Name = wsTempName
    wsTemp.Visible = xlSheetHidden
    ThisWorkbook.ActiveSheet.Cells.Copy wsTemp.Cells
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets(wsTempName).Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim wsCount As Long
    If boolFirst = True Then
        TempSheetCount = ThisWorkbook.Sheets.Count
        boolFirst = False
    Else
        wsCount = ThisWorkbook.Sheets.Count
        If wsCount < TempSheetCount Then
            MsgBox "Sheet(s) was/were deleted"
        ElseIf wsCount > TempSheetCount Then
             MsgBox "Sheet(s) was/were Added"
        End If
    End If
End Sub

缺点:如果工作表有很多数据,那么创建工作表备份可能是一件令人讨厌的事情。

选项3

这是Andy Pope提出的另一种方法。

缺点如该链接所述,使用多工作簿会变得更加复杂。

最新更新