【问题标题】:How to protect Excel workbook using VBA?如何使用 VBA 保护 Excel 工作簿?
【发布时间】:2010-09-11 11:25:44
【问题描述】:

使用复选框之类的触发器,我想保护我的工作簿。我试过 Excel 2003:

thisworkbook.protect("password",true,true)

thisworkbook.unprotect("password")

它不工作。有什么建议吗?

【问题讨论】:

  • 调用是 ActiveWorkbook.Protect 和 ActiveWorkbook.Unprotect,但应该可以。有关错误描述和代码位置的更多详细信息将有助于解决这个问题。
  • 嗨,richard,感谢您的回复。当我使用 thisworkbook.protect 时,它既没有显示错误,也没有将其设置为 protected。是不是我们应该打开一些功能来编写保护工作表的代码。我启用了我的宏。我没有任何线索

标签: excel vba


【解决方案1】:

我同意@Richard Morgan 的观点……您所做的应该是有效的,因此可能需要更多信息。

微软对options to protect your Excel 2003 worksheets有一些建议。

这里有更多信息...

来自帮助文件(保护方法):

expression.Protect(Password, Structure, Windows)

表达式必需。返回工作簿对象的表达式。

Password Optional Variant. 为工作表或工作簿指定区分大小写密码的字符串。如果省略此参数,您可以在不使用密码的情况下取消保护工作表或工作簿。否则,您必须指定密码才能取消保护工作表或工作簿。如果您忘记密码,您将无法取消对工作表或工作簿的保护。最好将密码列表及其对应的文档名称保存在安全的地方。

Structure Optional Variant. 为真以保护工作簿的结构(工作表的相对位置)。默认值为 False。

Windows 可选变体。 为真以保护工作簿窗口。如果省略此参数,则窗口不受保护。

ActiveWorkbook.Protect Password:="password", Structure:=True, Windows:=True

如果您想在工作表级别工作,我在几年前需要保护/取消保护时使用过类似的东西:

Sub ProtectSheet()
    ActiveSheet.Protect "password", True, True
End Sub

Sub UnProtectSheet()
    ActiveSheet.Unprotect "password"
End Sub

Sub protectAll()
    Dim myCount
    Dim i
    myCount = Application.Sheets.Count
    Sheets(1).Select
    For i = 1 To myCount
        ActiveSheet.Protect "password", true, true
        If i = myCount Then
            End
        End If
        ActiveSheet.Next.Select
    Next i
End Sub

【讨论】:

    【解决方案2】:
    1. 在您的示例代码中,您必须删除括号,因为它不是功能分配;同样出于文档原因,我建议您使用:= 表示法(请参阅下面的代码示例)

      1. Application.Thisworkbook指的是包含VBA代码的书,不一定是包含数据的书,请谨慎。

    将您正在处理的工作表表示为工作表对象并将其与逻辑变量一起传递给以下子对象:

    Sub SetProtectionMode(MySheet As Worksheet, ProtectionMode As Boolean)
    
        If ProtectionMode Then
            MySheet.Protect DrawingObjects:=True, Contents:=True, _
                            AllowSorting:=True, AllowFiltering:=True
        Else
            MySheet.Unprotect
        End If
    End Sub
    

    .Protect 方法中,您可以定义要允许/禁止的内容。此代码块将打开/关闭保护 - 在此示例中无需密码,您可以将其添加为参数或在 Sub 中硬编码。无论如何,PW 将被硬编码。如果您不想这样做,只需调用“保护对话框”窗口并让用户决定要做什么:

    Application.Dialogs(xlDialogProtectDocument).Show
    

    希望有帮助

    祝你好运 - MikeD

    【讨论】:

      【解决方案3】:

      要锁定整个工作簿无法打开,可以在 VBA 中使用Thisworkbook.password 选项。

      如果要保护工作表,则必须先使用选项 Thisworkbook.sheets.cells.locked = True 锁定单元格,然后使用选项 Thisworkbook.sheets.protect password:="pwd"

      主要搜索这些关键字:Thisworkbook.passwordThisworkbook.Sheets.Cells.Locked

      【讨论】:

      • 这是问题的真正答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多