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 保护/取消保护工作表命令无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在excel中如何取消工作表的保护命令

VBA 锁定有内容的单元格

公共密码无法在受保护的工作表中识别

保护 Excel 工作表 - 不可能?

Excel用宏vb命令怎指定某一列锁定,其他单元格可编辑与合并?

如何阻止某人取消隐藏我的 Excel 工作表?