要想保护工作表,可以单击“审阅”选项卡中的“保护工作表”按钮,如下图所示。
在“保护工作表”对话框中输入密码(当然也可以为空,即不设置密码),进行相应的选取设置后,即对工作表设置了保护。此时,用户不能随意在工作表中编辑单元格。
Excel宏录制器为上述操作录制的代码为:
Sub Macro1()
'
' Macro1 Macro
' 由完美Excel录制
'
ActiveSheet.ProtectDrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
可以看出,Excel VBA使用Protect方法保护工作表,虽然在操作中我们为保护工作表设置了密码,但Excel并没有为我们录制设置的密码项。然而,我们可以方便地使用Protect方法通过代码为保护工作表设置密码。
Protect方法
工作表对象的Protect方法用于保护工作表,使之不能够被修改。Protect方法有很多参数,多达16个,但均为可选参数,我们可以根据需要有选择地使用这些参数以达到目的,例如,虽然对工作表进行了保护,但仍允许用户对限定的区域进行修改。
示例1:使用Protect方法保护工作表
下面的代码保护当前工作表,并设置密码为“test”。
Sub ProtectActivesheet()
If NotActiveSheet.ProtectContents Then
ActiveSheet.ProtectPassword:="test", _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
End If
End Sub
说明:
-
参数Password用来设置密码,区分大小写。如果忽略该参数,那么在取消工作表保护时不需要密码。
-
参数DrawingObject、Contents、Scenarios分别设置是否保护工作表中的形状、内容和方案。它们的默认值都是True。
-
ProtectContents属性返回一个Boolean值,表明工作表是否已保护。上述代码运行时,如果工作表已受保护,则不执行任何操作。
Unprotect方法
要想通过代码修改受保护的工作表,必须先取消工作表保护,才能进行修改。Unprotect方法用于取消工作表保护。
示例2:使用Unprotect方法取消工作表保护
下面的代码取消对设置了密码“test”的当前工作表的保护。
Sub UnprotectActivesheet()
IfActiveSheet.ProtectContents Then
ActiveSheet.UnprotectPassword:="test"
End If
End Sub
说明:
-
Unprotect方法只有一个可选参数Password,用来提供保护工作表时所设置的密码。
-
如果保护工作表时没有设置密码,可以忽略参数Password。
-
如果提供的密码不正确,那么Excel会弹出一个错误提示框,如下图所示。
示例3:设置与取消工作表保护的通用代码
下面是Steven M. Hansen编写的一段代码,用于设置与取消工作表保护:
说明:
-
这段代码可以沿用到自已的代码中,用于需要在代码运行过程中设置工作表保护,或者需要修改受保护工作表中的内容而临时取消工作表保护的情形。
-
代码中使用了错误处理语句,以及带参数的函数过程。在后续的文章中会详细讲解这些技术。