【问题标题】:Deletion of sheet on prompt in Excel在 Excel 中按提示删除工作表
【发布时间】:2013-12-04 04:35:06
【问题描述】:

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

【问题讨论】:

  • I can decide if I should proceed with deleting the sheet or not? 但是你为什么要做 Excel 已经在做的事情呢?或者我错过了一点。顺便提一句。没有直接的方法可以实现您的目标,但是我可以想到一个混乱的替代方案...
  • 这里的重点是......一旦在工作表选项卡上的工作表集合中的任何工作表上单击删除按钮,我还想在字典中查看工作表名称是否与其中一个条目匹配哪个删除可以被批准,一旦我看到它可以被删除..我只会在我的代码 Sheet1.delete() 中说,否则会发出一条警告消息,表示无法删除工作表。
  • 那你不需要陷印right click - Delete on sheet tab而是一般删除工作表?
  • 是的.. 一般删除:)

标签: c# excel vsto excel-2007 vba


【解决方案1】:

很遗憾,没有处理工作表删除事件的特定事件。话虽如此,我可以想到三个选项,但三个都有自己的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

HERE 是 Andy Pope 建议的另一种方法。

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

【讨论】:

  • 我选择了选项 3 :) 无论如何谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2010-10-15
  • 2014-05-15
  • 1970-01-01
  • 2016-03-17
相关资源
最近更新 更多