请帮助我,10 张纸中有 2 张一直处于保护状态。我想让它们完全不受保护,永远不受保护。我的代码如下 NB:这两张纸是 Recon 2103 & Recon 2123:
Private Sub quickProt()
Private Sub quickProt()
ActiveWorkbook.Worksheets 中的每个工作表
If Sheet.Name = "Master" Or Sheet.Name = "GL" Or Left(Sheet.Name, 2) = "BE" Or Sheet.Name = "Log" Or Sheet.Name = "ZAA110" Or Sheet.Name = "Recon 2103" Or Sheet.Name = "Recon 2123" Then
Sheet.Unprotect ("SSDPWD@123")
'Sheet.Protect ("SSDPWD@123")
否则
Sheet.Protect ("SSDPWD@123")
如果结束
下一个工作表
结束子
如上所示,我在列表中添加了两张取消保护的工作表。
如上图所示,我在列表中添加了两个要取消保护的工作表。
的代码的问题在于,它会在循环的每次迭代中取消保护然后再次保护工作表。这意味着即使“Recon 2103”和“Recon 2123”在
If
语句中被取消保护,它们也会在随后的
Else
块中被再次保护。
要使这两张工作表永久不受保护,需要将它们从
If
和
Else
条件中移除,并添加单独的代码行来取消保护它们。
以下是更新后的代码:
Private Sub quickProt()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
If sh.Name = "Master" Or sh.Name = "GL" Or Left(sh.Name, 2) = "BE" Or sh.Name = "Log" Or sh.Name = "ZAA110" Then
sh.Unprotect ("SSDPWD@123")
'Sheet.Protect ("SSDPWD@123") '这行代码应该是多余的,因为只想取消保护某些工作表。
Else
sh.Protect ("SSDPWD@123")
End If
Next sh
'单独取消保护 "Recon 2103" 和 "Recon 2123"
Sheets("Recon 2103").Unprotect ("SSDPWD@123")
Sheets("Recon 2123").Unprotect ("SSDPWD@123")
End Sub
这段代码首先会像的原始代码一样循环遍历所有工作表,对大多数工作表进行保护。然后,它会明确地取消保护“Recon 2103”和“Recon 2123”,从而确保它们保持不受保护状态。
标签:excel,vba From: 78570431