VBA - 确定Activeworkbook是否有密码

时间:2015-08-28 15:07:10

标签: excel vba excel-vba

我尝试使用VBA来确定活动工作簿是否有密码。 (它是检查以确保活动工作簿可以安全分发的工具的一部分)

到目前为止,我所尝试的并没有奏效:

    无论什么是什么,
  • ActiveWorkbook.Password都会返回******** 实际工作簿的密码实际上是 - 即使工作簿有 没有密码。

  • ActiveWorkbook.ProtectWindowsActiveWorkbook.ProtectStructure
    即使活动工作簿有密码,也返回False。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

工作簿对象具有' HasPassword'您可以使用的财产:

Public Sub TestIt()

    If ActiveWorkbook.HasPassword Then
        MsgBox "Password Protected"
    Else
        MsgBox "Not Password Protected"
    End If

End Sub

答案 1 :(得分:0)

您确定工作簿有保护吗?我创建了这个基本的UDF来测试保护:

Function IsWorkbookProtected(wb As Workbook, nType As Integer) As Boolean
    IsWorkbookProtected = False

    If nType = 1 Then 'Test for protected structure
        IsWorkbookProtected = CBool(wb.ProtectStructure)
    Else ' Test for protected windows
        IsWorkbookProtected = CBool(wb.ProtectWindows)
    End If
End Function

当我运行此程序时,它运行正常:

Sub TestFunction()
    MsgBox (IsWorkbookProtected(ActiveWorkbook, 2))
End Sub

答案 2 :(得分:0)

此代码将测试保护并让您知道受保护的内容(使用或不使用密码):

Public Sub TestPassword()

    Dim wrkBk As Workbook
    Dim wrkSht As Worksheet

    Set wrkBk = ActiveWorkbook

    With wrkBk
        If .ProtectStructure Or .ProtectWindows Then
            MsgBox "Workbook protection"
        End If
    End With

    For Each wrkSht In wrkBk.Worksheets
        If wrkSht.ProtectContents Then
            MsgBox wrkSht.Name & " protected."
        End If
    Next wrkSht

End Sub

答案 3 :(得分:0)

一旦测试了保护,您可以尝试取消保护工作簿而不提供密码。如果工作簿受密码保护,则会失败。

ActiveWorkbook.Unprotect Password:=""

然后你可以处理错误并从那里拿走它。

相关问题