VBA 保护/取消保护工作表命令无法正常工作
Posted
技术标签:
【中文标题】VBA 保护/取消保护工作表命令无法正常工作【英文标题】:VBA protect/unprotect sheet command not working properly 【发布时间】:2019-03-30 09:39:40 【问题描述】:我构建了一个小型 Excel 工具,它基本上要求用户输入一些成本元素并输出输出。在管理员模式下,我创建了锁定和解锁按钮,允许管理员用户保护和取消保护所有工作表以进行编辑。我的工具里总共有 10 张纸。除了两张纸之外,按钮工作正常。
Unlock 宏取消保护除 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
Lock 宏保护除输出表一以外的所有表。如果我将相关的代码放在即时窗口中,它也不起作用。
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
知道这里可能出了什么问题吗?
谢谢! 道姆89
【问题讨论】:
如果他们都有一个共享密码,我会在这里考虑一个表单循环。另外,如果是这样,为什么不锁定/解锁这本书? 【参考方案1】:考虑一个工作表循环,而不是像这样输入每个工作表的名称 ~
Sub admin_unlock_Click()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Unprotect "xxx"
Next ws
End Sub
Sub admin_lock_Click()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Protect "xxx", UserInterFaceOnly:=True
Next ws
End Sub
如果您要锁定每张纸,为什么不直接锁定书本呢?然后你只需要保护/取消保护这本书而不是每一张纸。
【讨论】:
感谢您的帮助 urdearboy,但循环似乎没有帮助:(我现在会尝试保护工作簿。【参考方案2】:.Protect
默认情况下保护 VBA 中锁定的单元格。可能您的工作表没有锁定单元格。作为一种解决方法,试试这个:
在 VBA 中创建一个新模块。 在新模块中复制并粘贴:
Sub TestMe()
Worksheets("Cost Inputs").Cells.Locked = True
End Sub
在即时窗口中,输入TestMe
并按Enter。
再次运行您的代码。是否受到保护?如果不是,那么你在你的代码上 probably have On Error Resume Next
。
【讨论】:
嗨,Vityata,感谢您的帮助,但我确实在工作表上锁定了不受保护的单元格。至于 TestMe,它会锁定工作表上的所有单元格,这不是我想要的(输入单元格必须保持解锁状态)。你对 On Error Resume Next 是什么意思? 你在代码中的任何地方都有错误恢复是问以上是关于VBA 保护/取消保护工作表命令无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章