Skipping Password-Protected Documents in a Batch Process

Article contributed by Ibby

The Documents.Open method has a PasswordDocument parameter where you can specify the password of the document to be opened. If you put in a nonsense password (i.e.: one that is unlikely to be used by any sane person as a password!), you will observe the following behaviour:

Option Explicit
 
Public Sub ProcessBatch()
 
Dim strFileName As String
Dim strFilePath As String
Dim oDoc As Document
   
    ' Set Directory for Batch Process
    strFilePath = "C:\Test\"
   
    ' Get Name of First .doc File from Directory
    strFileName = Dir$(strFilePath & "*.doc")
   
 
    While Len(strFileName) <> 0
   
        ' Set Error Handler
        On Error Resume Next
               
        ' Attempt to Open the Document
        Set oDoc = Documents.Open( _
                   FileName:=strFilePath & strFileName, _
                   PasswordDocument:="?#nonsense@$")
       
        Select Case Err.Number
            Case 0
                ' Document was Successfully Opened
                Debug.Print strFileName & " was processed."

            Case 5408
                ' Document is Password-protected and was NOT Opened
                Debug.Print strFileName & " is password-protected " & _
                    "and was NOT processed."
                ' Clear Error Object and Disable Error Handler
                Err.Clear
                On Error GoTo 0
                ' Get Next Document
                GoTo GetNextDoc

            Case Else
                ' Another Error Occurred
                MsgBox Err.Number & ":" & Err.Description
        End Select
       
        ' Disable Error Handler
        On Error GoTo 0
       
        '-------------------------------------
        '-------------------------------------
        '---Perform Action on Document Here---
        '-------------------------------------
        '-------------------------------------
       
        ' Close Document
        oDoc.Close
       
        ' Clear Object Variable
        Set oDoc = Nothing
       
GetNextDoc:
       
        ' Get Next Document from Specified Directory
        strFileName = Dir$()
 
    Wend
   
End Sub