动态保护工作表不被Excel中的意外删除

时间:2018-06-06 19:11:34

标签: excel vba excel-vba

我正在尝试在工作簿中的工作表上添加动态保护。我有很多不同的床单,有时我会删除一张我偶然需要的床单。

如果Cell OP15包含一个值,这意味着我可以删除工作表来清理我的工作簿。如果单元格OP15包含值?

,如何为仅允许我删除它的工作表创建保护

我能在网上找到最接近的东西就是这样:

     ActiveSheet.Unprotect
     ' your vba code here
     ActiveSheet.Protect

2 个答案:

答案 0 :(得分:0)

.BeforeDelete没有取消,因此您无法阻止他们删除工作表。

来自this网站,您可以复制工作表,并将其保存为删除方式。您可以使用此例程来决定是否需要从删除中保存工作表:

Private Sub Worksheet_BeforeDelete()

Dim MyName As String

'Abort if no value in OP15
if [OP15].value<>'' then exit sub

‘Capture the original worksheet name
MyName = ThisWorkbook.ActiveSheet.Name

‘Rename the worksheet
ThisWorkbook.ActiveSheet.Name = Left(MyName, 30) + “#”

‘Create a copy of the worksheet
ThisWorkbook.ActiveSheet.Copy _
After:=Sheets(ThisWorkbook.ActiveSheet.Index)

‘Name the copy to the original name
ThisWorkbook.ActiveSheet.Name = MyName

End Sub

答案 1 :(得分:0)

此代码将粘贴到我的管理模板的工作表代码中。单元格A1被硬编码为“管理模板”。复制模板时,单元格A1将更改为新选项卡的名称。

     Option Explicit

     Private Sub Worksheet_Deactivate()

     'This sub prevents acidental deletion of tab until it has been hardcoded

     If Range("a1").Value = "admin template Ticket Info" Then
     ThisWorkbook.Protect , False
     Exit Sub
     End If

     If Range("OP15").Value <> "" Then
     MsgBox "Cannot delete tab until the Onboarding details have been hardcoded."
     Exit Sub
     End If

     ThisWorkbook.Protect , True

     Application.OnTime Now, "Unprotectbook"

     End Sub

将其复制到其中一个模块

     Sub UnprotectBook()

     ThisWorkbook.Unprotect

     End Sub