VBA保护/取消保护工作表命令无法正常工作

时间:2018-10-25 17:29:01

标签: vba protected

我建立了一个小的Excel工具,该工具基本上要求用户输入一些成本要素并吐出输出。在Admin模式下,我创建了Lock和Unlock按钮,允许admin用户保护和取消保护所有工作表以进行编辑。我的工具总共有10张纸。除了两张纸以外,这些按钮都工作正常。

“解锁”宏取消保护除“成本输入”表之外的所有表。但是,如果我使用一小段代码来保护即时窗口中的“成本输入”表,那么它可以正常工作!

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

关于这里可能出什么问题的任何想法吗?

谢谢! Dawm89

2 个答案:

答案 0 :(得分:1)

.Protect默认情况下保护VBA中的锁定单元。您的工作表可能没有锁定的单元格。作为解决方法,请尝试以下操作:

在VBA中创建一个新模块。 在新模块中,复制并粘贴:

Sub TestMe()
    Worksheets("Cost Inputs").Cells.Locked = True
End Sub

在立即窗口中,输入TestMe,然后按 Enter 。 再次运行您的代码。它受到保护吗?如果不是,则在代码上robably have On Error Resume Next

答案 1 :(得分: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

如果要锁定每张纸,为什么不锁定书呢?然后,您只需要保护/取消保护书,而不是保护每张纸。