VBA – 确定Activeworkbook是否有密码

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

到目前为止,我已经尝试过,但没有奏效:

  • ActiveWorkbook.Password返回********不pipe是什么
    活动工作簿的密码实际上是 – 即使工作簿没有密码。

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

任何帮助将不胜感激。

工作簿对象具有可以使用的“HasPassword”属性:

 Public Sub TestIt() If ActiveWorkbook.HasPassword Then MsgBox "Password Protected" Else MsgBox "Not Password Protected" End If End Sub 

你确定工作簿有保护吗? 我创build了这个基本的UDF来testing保护:

 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 

此代码将testing保护并让您知道什么是受保护的(有或没有密码):

 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 

一旦您进行了保护testing,您可以尝试在不提供密码的情况下取消保护工作簿。 如果工作簿被密码保护,这将失败。

 ActiveWorkbook.Unprotect Password:="" 

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