我正在尝试在工作簿中的工作表上添加动态保护。我有很多不同的床单,有时我会删除一张我偶然需要的床单。
如果Cell OP15包含一个值,这意味着我可以删除工作表来清理我的工作簿。如果单元格OP15包含值?
,如何为仅允许我删除它的工作表创建保护我能在网上找到最接近的东西就是这样:
ActiveSheet.Unprotect
' your vba code here
ActiveSheet.Protect
答案 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