2014-01-09 6 views
1

У меня есть проект, в котором я должен пройти более 1000+ файлов excel в папке и посмотреть, какие из них защищены паролем, а какие нет. Для того, чтобы сэкономить время, я написал макрос, чтобы сделать это, который выглядит следующим образом:Excel VBA Password Protection check

Sub CheckWbook() 
    Dim Value As String, a As Single, myfolder as string 
    With Application.FileDialog(msoFileDialogFolderPicker) 
     .Show 
     myfolder = .SelectedItems(1) & "\" 
    End With 
    Range("C4") = myfolder 
    Range("B7:C" & Rows.Count) = "" 
    a = 0 
    Value = Dir(myfolder) 
    Do Until Value = "" 
     If Value = "." Or Value = ".." Then 
     Else 
      If Right(Value, 3) = "xls" Or Right(Value, 4) = "xlsx" Or Right(Value, 4) = "xlsm" Then 
       On Error Resume Next 
       Workbooks.Open Filename:=myfolder & Value, Password:="zzzzzzzzzzzz" 
       If Err.Number > 0 Then 
        Range("C7").Offset(a, 0).Value = "Yes" 
       End If 
       Workbooks(Value).Close False 
       On Error GoTo 0 
       Range("B7").Offset(a, 0).Value = Value 
       a = a + 1 
      End If 
End If 
Value = Dir 
Loop 
End Sub 

Проблема у меня в том, что всплывающее окно для ввода пароля все еще присутствует: он не заполняет пароль , Любая помощь будет высоко оценен. -А

Редактировать изменил код немного, и миновали сообщение об ошибке, но теперь я застрял в пароля всплывающего окна, который останавливает макрос полностью работает, несмотря на On Error Resume Next особенность ,

Тогда, я наткнулся на этот код, который я думал, может помочь:

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:="?#[email protected]$") 

    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 

, но это не может распознать oDoc как документ. Любые идеи о том, как заставить его работать?

+0

'Application.DisplayAlerts = False' не работает, так как открывать от ОР. Один из подходов - отправить сообщение WM_CLOSE во всплывающее диалоговое окно: использовать SendMessage в API Windows для этого. Но не так просто встраивать в свой код. Другой подход * мог бы заключаться в том, чтобы кодировать приведенное выше в VBScript, стараясь сохранить состояние видимости объекта Excel.Application в False. Я никогда не пробовал это, поэтому не могу гарантировать, что всплывающее диалоговое окно не будет отображаться. – Bathsheba

+0

Странно, я пробовал ваш макрос, он отлично работает. Так что проблема не в макросе, а в чем-то esle. Не могли бы вы более точно описать, когда возникает проблема, в которой итерация ... Как не связанный отзыв, я бы рекомендовал использовать опцию Application.ScreenUpdating = False, которая может повысить производительность вашего макроса. – lbeliarl

ответ

0

, чтобы открыть файл excel? или лист

если это лист должен быть

ActiveSheet.Unprotect Пароль: = "ВАШ ПАРОЛЬ"

если это первенствуйте

ActiveWorkbook.Unprotect ("youtpassword")

Надеюсь, вам понравится, я многому научился здесь. Надеюсь, вы тоже, надеюсь, окажете мне помощь.

+0

Я не хочу снимать защиту с файла, просто проверьте, защищены ли файлы паролем или нет. Спасибо за подсказку в любом случае! – user3094302