2015-08-28 37 views
3

我正在嘗試使用VBA來確定活動工作簿是否有密碼。 (這是一個工具的一部分,檢查,以確保活動工作簿是安全的分發)VBA - 確定Activeworkbook是否有密碼

我到目前爲止還沒有嘗試過的工作:

  • ActiveWorkbook.Password回報***** ***無論
    活動工作簿的密碼實際上是什麼 - 即使工作簿確實沒有密碼 也是如此。

  • ActiveWorkbook.ProtectWindows或者ActiveWorkbook.ProtectStructure
    個返回False,即使活動工作簿有密碼。

任何幫助將不勝感激。

+0

'activeworkbook.protection'也許? – findwindow

+0

您的意思是代碼上的密碼,或修改WorkBook? –

回答

3

工作簿對象具有「HasPassword」屬性,你可以使用:

Public Sub TestIt() 

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

End Sub 
+0

只有在工作簿中有密碼的情況下才有效。有可能在沒有密碼的情況下保護它(這似乎有些違反直覺) – user3561813

+0

是的,但原始問題要求輸入整個工作簿密碼 – Fink

+0

有效的點。我假定他想檢查一本工作簿是否受到保護,但他確實特別詢問了密碼。 – user3561813

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 
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 
+0

OP表示他們已經嘗試了ProtectStructure和ProtectWindows ... – findwindow

+0

他們這樣做,這表明該方法未被正確使用。如果我在保護工作簿的同時保護Windows,則MsgBox ActiveWorkbook.ProtectWindows將返回TRUE。也許ActiveWorkbook不是OP在運行代碼時所期待的文件 - 在我可以說之前需要查看完整的代碼。 –

0

一旦您測試了保護措施,您可以嘗試在不提供密碼的情況下取消保護工作簿。如果工作簿受密碼保護,這將失敗。

ActiveWorkbook.Unprotect Password:="" 

然後你就可以處理錯誤,並從那裏。