|
楼主 |
发表于 2009-2-18 20:46
|
显示全部楼层
第2部分Worksheet(工作表)对象
技巧38 工作表的保护与解除保护
在实际应用中,Excel编制的报表、表格、程序等,往往在单元格中设置了公式、函数、自定义格式等,为了防止在使用过程中修改或无意中修改这些设置,一般使用Excel的工作表保护功能来保护这些设置。
但是程序中可能会使用代码对受保护的工作表进行操作,此时如果没有解除工作表保护,运行出现错误,如图所示。
解决方法是在运行操作工作表的代码前先使用代码解除工作表保护,待操作完毕后再保护工作表,如下面的代码所示。- #001 Sub ShProtect()
- #002 With Sheet1
- #003 .Unprotect Password:="12345"
- #004 .Cells(1, 1) = 100
- #005 .Protect Password:="12345"
- #006 End With
- #007 End Sub
复制代码 代码解析:
ShProtect过程在受保护的工作表中对单元格进行操作,其中第3行代码使用Unprotect方法解除工作表的保护。应用于Worksheet 对象的Unprotect方法解除工作表的保护,如果工作表不是受保护的,则此方法不起作用,所以在解除之前无需判断工作表是否受保护,其语法如下:
expression.Unprotect(Password)
参数expression是必需的,该表达式返回一个Worksheet 对象。
参数Password是可选的,指定用于解除工作表的保护的密码,此密码是区分大小写的。
第4、5行代码在单元格录入数据后使用Protect方法重新保护工作表。应用于Worksheet对象的Protect方法保护工作表使其不至被修改,语法如下:
expression.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
其中参数expression是必需的,该表达式返回一个Worksheet对象。
参数Password是可选的,为一个字符串,该字符串为工作表指定区分大小写的密码。
其他参数都是可选参数,其功能等同于如图所示的工作表保护对话框中的各项选项,具体请参阅VBA帮助。
如果一个Excel文件使用时间过长,忘记了工作表保护时设置的密码,那么也可以使用VBA解除工作表的保护,代码如下:- #001 Sub RemoveShProtect()
- #002 Dim i1 As Integer, i2 As Integer, i3 As Integer
- #003 Dim i4 As Integer, i5 As Integer, i6 As Integer
- #004 Dim i7 As Integer, i8 As Integer, i9 As Integer
- #005 Dim i10 As Integer, i11 As Integer, i12 As Integer
- #006 On Error Resume Next
- #007 If ActiveSheet.ProtectContents = False Then
- #008 MsgBox "该工作表没有保护密码!"
- #009 Exit Sub
- #010 End If
- #011 For i1 = 65 To 66: For i2 = 65 To 66: For i3 = 65 To 66
- #012 For i4 = 65 To 66: For i5 = 65 To 66: For i6 = 65 To 66
- #013 For i7 = 65 To 66: For i8 = 65 To 66: For i9 = 65 To 66
- #014 For i10 = 65 To 66: For i11 = 65 To 66: For i12 = 32 To 126
- #015 ActiveSheet.Unprotect Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) _
- #016 & Chr(i6) & Chr(i7) & Chr(i8) & Chr(i9) & Chr(i10) & Chr(i11) & Chr(i12)
- #017 If ActiveSheet.ProtectContents = False Then
- #018 MsgBox "已经解除了工作表保护!"
- #019 Exit Sub
- #020 End If
- #021 Next: Next: Next: Next: Next: Next
- #022 Next: Next: Next: Next: Next: Next
- #023 End Sub
复制代码 代码解析:
RemoveShProtect过程解除工作表的保护。
其中第7行到第10行代码判断工作表是否受保护,ProtectContents属性返回工作表的保护状态,如果工作表的内容处于保护状态,则该值为True。
第11行到第22行代码使用For...Next 语句和Chr函数来返回指定字符码所代表的字符串组合不断地尝试解除工作表保护,一旦工作表的ProtectContents属性返回False说明已经解除工作表保护。
[ 本帖最后由 yuanzhuping 于 2009-2-19 07:52 编辑 ] |
|