繁体   English   中英

动态保护工作表以防止在Excel中意外删除

[英]Dynamically protect sheet from accidental deletion in Excel

我正在尝试在工作簿的工作表上添加动态保护。 我有很多不同的工作表,有时我会意外删除仍然需要的工作表。

如果单元格OP15中包含一个值,则表示我可以删除工作表以清理工作簿。 如何为工作表创建保护,仅当单元格OP15包含值时才允许删除它?

我在互联网上能找到的最接近的东西是这些东西:

     ActiveSheet.Unprotect
     ' your vba code here
     ActiveSheet.Protect

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

网站上,您可以复制工作表,并保存该工作表以免被删除。 您可以使用此例程来确定是否需要保存工作表以免被删除:

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

将此代码粘贴到我的管理模板的工作表代码中。 单元格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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM