我构建了一个小型Excel工具,要求用户输入成本元素并输出结果。
我创建了“锁定”和“解锁”按钮,允许管理员用户出于编辑目的保护和取消保护所有工作表。我在工具中总共有10个工作表。除了两个工作表外,这些按钮都正常工作。
[解除锁定]宏会解除保护[成本输入]工作表以外的所有工作表。
但是,如果我使用一小段代码来取消保护即时窗口中的Cost Inputs工作表,它就可以工作。
Sub admin_unlock_Click()
Application.ScreenUpdating = False
Sheets("Home").Unprotect Password:="xxx"
Sheets("Cover Page").Unprotect Password:="xxx"
Sheets("Study Categorization").Unprotect Password:="xxx"
Sheets("Cost Inputs").Unprotect Password:="xxx"
Sheets("Price Indicators").Unprotect Password:="xxx"
Sheets("Benchmarking Output").Unprotect Password:="xxx"
Sheets("Output Sheet").Unprotect Password:="xxx"
Sheets("Instructions").Unprotect Password:="xxx"
Sheets("Glossary").Unprotect Password:="xxx"
Sheets("Export to CRM").Unprotect Password:="xxx"
Application.ScreenUpdating = True
End Sub
“锁定”宏可保护除“输出工作表”之外的所有工作表。
如果我将相关的代码放在即时窗口中,它也不起作用。
Sub admin_lock_Click()
Application.ScreenUpdating = False
Sheets("Home").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Cover Page").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Study Categorization").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Cost Inputs").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Price Indicators").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Benchmarking Output").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Output Sheet").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Instructions").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Glossary").Protect Password:="xxx", UserInterFaceOnly:=True
Sheets("Export to CRM").Protect Password:="xxx", UserInterFaceOnly:=True
Application.ScreenUpdating = True
End Sub
3条答案
按热度按时间ac1kyiln1#
考虑一个工作表循环,而不是像这样键入每个工作表的名称~
如果你要锁定每一张纸,为什么不直接锁定书呢?那么你只需要保护/取消保护书,而不是每一张纸。
aiazj4mn2#
请注意,Excel有问题。取消保护!
使用分配的对象执行取消保护是不可靠的,例如:
此方法 * 可能 * 会失败,并且如果不知道该问题,可能会成为一个需要解决的问题。
为确保安全,请直接取消工作表保护(按名称或编号)
或
希望这对DG有帮助
5ssjco0h3#
默认情况下,
.Protect
保护VBA中的锁定单元格。您的工作表可能没有锁定的单元格。作为解决方法,请尝试以下操作:在VBA中创建新模块。在新模块中复制并粘贴以下内容:
在即时窗口中,输入
TestMe
并按Enter键。再次运行代码。它是否受保护?如果没有,则在代码中输入robably have On Error Resume Next
。