excel 保护/取消保护工作表

vc9ivgsu  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(197)

我构建了一个小型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
ac1kyiln

ac1kyiln1#

考虑一个工作表循环,而不是像这样键入每个工作表的名称~

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

如果你要锁定每一张纸,为什么不直接锁定书呢?那么你只需要保护/取消保护书,而不是每一张纸。

aiazj4mn

aiazj4mn2#

请注意,Excel有问题。取消保护!
使用分配的对象执行取消保护是不可靠的,例如:

ws.Unprotect

此方法 * 可能 * 会失败,并且如果不知道该问题,可能会成为一个需要解决的问题。
为确保安全,请直接取消工作表保护(按名称或编号)

Sheets("MySheet").Unprotect

Sheets(3).Unprotect

希望这对DG有帮助

5ssjco0h

5ssjco0h3#

默认情况下,.Protect保护VBA中的锁定单元格。您的工作表可能没有锁定的单元格。作为解决方法,请尝试以下操作:
在VBA中创建新模块。在新模块中复制并粘贴以下内容:

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

在即时窗口中,输入TestMe并按Enter键。再次运行代码。它是否受保护?如果没有,则在代码中输入robably have On Error Resume Next

相关问题