使用ws.protect设置工作表保护 - 但不使用菜单取消保护(Review - Unprotect sheet)

时间:2011-11-24 08:00:00

标签: excel vba protection

我有以下代码来保护Excel 2007中的工作簿工作表

Private Sub password_protectallsheets()
For Each ws In Worksheets
ws.protect Password = "edc1"
Next
End Sub

但是当我尝试通过Excel 2007菜单(查看 - >取消保护表)使用密码取消保护工作表时,它表示您提供的密码不正确。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

密码参数需要用“:=”指定 - 而不仅仅是“=”。对于方法的参数,这是正确的:

ws.protect Password := "edc1"

要使编译器捕获这些类型的错误,请始终在模块的开头使用Option Explicit,如上面的JMax所做的那样。当您这样做时,编译器会在您忘记“:”选项时给出“变量未定义”错误。显式选项将为您节省大量时间和其他类型的变量声明错误。要为所有新模块启用它,请在VBE中选中工具>选项>编辑>要求变量声明。

我无法弄清楚的部分是为什么,在没有“:”的代码中,根本没有分配密码。我本来希望这张表得到保护,但没有密码。

答案 1 :(得分:0)

Ws.Unprotect真的能保护工作表吗? - 它无法保护未设置保护的工作表

在宏中设置保护为什么不记录保护工作表并查看代码

答案 2 :(得分:0)

尝试:

Option Explicit

Private Sub password_protectallsheets()
    Dim ws As Worksheet
    For Each ws In Worksheets
        ws.Protect "edc1"
    Next
End Sub

没有password关键参数 它适用于我的Excel 2007。

顺便说一下,请务必复制/粘贴密码,或确保检查最后一个字符是1(一个)还是l(小写字母L )。

答案 3 :(得分:0)

ws.protect Password = "edc1"ws.protect Password := "edc1"无效! 必须通过变量发送密码才能修复此错误!

尝试一下,它对我有用:

一张纸

Sub Protect()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("SHEET")
Dim strPassword As String: strPassword = "YourPassword"
ws.Protect Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
        UserInterfaceOnly:=True, AllowFormattingCells:=False, AllowFormattingColumns:=False, _
        AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
        AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, _
        AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False
End Sub

Sub UnProtect()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("SHEET")
Dim strPassword As String: strPassword = "YourPassword"
ws.Unprotect Password:=strPassword
End Sub

所有工作表

Sub ProtectAllSheets()
    Dim ws As Worksheet
    Dim strPassword As String: strPassword = "YourPassword"
    
    For Each ws In Worksheets
    ws.Protect Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
        UserInterfaceOnly:=True, AllowFormattingCells:=False, AllowFormattingColumns:=False, _
        AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
        AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, _
        AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False
    Next ws
    
End Sub

Sub UnProtectAllSheets()
    Dim ws As Worksheet
    Dim strPassword As String: strPassword = "YourPassword"
    
    For Each ws In Worksheets
        ws.Unprotect Password:=strPassword
    Next ws
    
End Sub