使用像复选框这样的触发器,我想保护我的工作簿。我试过Excel 2003:
thisworkbook.protect("password",true,true)
thisworkbook.unprotect("password")
它不起作用。有什么建议吗?
答案 0 :(得分:7)
我同意@Richard Morgan ......你在做什么应该有效,所以可能需要更多的信息。
Microsoft对options to protect your Excel 2003 worksheets提出了一些建议。
这里有更多信息...
来自帮助文件(保护方法):
expression.Protect(Password, Structure, Windows)
expression必需。返回Workbook对象的表达式。
密码可选变体。一个字符串,它指定工作表或工作簿的区分大小写的密码。如果省略此参数,则可以在不使用密码的情况下取消保护工作表或工作簿。否则,您必须指定密码以取消保护工作表或工作簿。如果忘记密码,则无法取消保护工作表或工作簿。最好将密码及其相应文档名称列表保存在安全的地方。
结构可选Variant。为True以保护工作簿的结构(工作表的相对位置)。默认值为False。
Windows可选Variant。为True以保护工作簿窗口。如果省略此参数,则窗口不受保护。
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
答案 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将被硬编码。如果您不想这样做,只需调用Protection Dialog窗口并让用户决定该怎么做:
Application.Dialogs(xlDialogProtectDocument).Show
希望有所帮助
祝你好运 - MikeD答案 2 :(得分:1)
要锁定整个工作簿,可以在VBA中使用Thisworkbook.password
选项。
如果要保护工作表,则必须先使用选项Thisworkbook.sheets.cells.locked = True
锁定单元格,然后使用选项Thisworkbook.sheets.protect password:="pwd"
。
主要搜索以下关键字:Thisworkbook.password
或Thisworkbook.Sheets.Cells.Locked