VBA – 确定Activeworkbook是否有密码
我正在尝试使用VBA来确定活动工作簿是否有密码。 (这是检查工具的一部分,以确保活动工作簿可以安全地分发)
到目前为止,我已经尝试过,但没有奏效:
-
ActiveWorkbook.Password
返回********不pipe是什么
活动工作簿的密码实际上是 – 即使工作簿没有密码。 -
ActiveWorkbook.ProtectWindows
或ActiveWorkbook.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:=""
然后你可以处理错误,并从那里拿走。