测试工作簿是否包含受密码保护的图表工作表

时间:2014-07-29 23:07:00

标签: excel excel-vba vba

我正在使用此代码来测试工作表是否在指定的工作簿objXL中受密码保护。

Function IsProtected(objXL As Object) As Boolean
Dim wksht As Excel.Worksheet
Dim cell As Excel.Range
Select Case TypeName(objXL)
Case "Worksheet"
If objXL.ProtectContents Then
IsProtected = True
Exit Function
End If
Case "Workbook"
If objXL.ProtectStructure Then
IsProtected = True
Exit Function
End If
For Each wksht In objXL.Worksheets
If wksht.ProtectContents Then
IsProtected = True
Exit Function
End If
Next wksht
Case "Range"
If objXL.Cells.Count = 1 Then
If (objXL.Locked And objXL.Parent.ProtectContents) Or (IsProtected(objXL.Parent.Parent)) Then
IsProtected = True
Exit Function
End If
Else
For Each cell In objXL
If (cell.Locked And cell.Parent.ProtectContents) Or (IsProtected(cell.Parent.Parent)) Then
IsProtected = True
Exit Function
End If
Next cell
End If

End Select
End Function

该功能无法检测受密码保护的图表工作表。我有什么想法可以修改它吗?

1 个答案:

答案 0 :(得分:0)

我相信如果您遍历所有工作表而不是所有工作表(不包括图表工作表),它应该可以工作。尝试在带有图表工作表的工作簿中运行下面的代码并查看差异。

Sub wkshts()

For Each ws In Worksheets
    Name = Name & " " & ws.Name & vbNewLine    
Next
MsgBox Name
End Sub

Sub shts()

For Each ws In sheets
    Name = Name & " " & ws.Name & vbNewLine
Next
MsgBox Name
End Sub