Я открываю целую кучу книг, которые имеют один и тот же пароль, чтобы проверить свои листы.
Программа запускается с фиктивным паролем, который не удастся выполнить, и когда это произойдет, пользовательская форма (с именем *) 1003 *) отображается для ввода пароля для всех файлов. Впоследствии каждая рабочая книга открывается с помощью этого пароля. Таким образом, он должен A) никогда не завершаться с ошибкой и B) никогда не использовать пользовательскую форму ввода пароля по умолчанию.
Private Function CheckFiles(ByRef WkbApp As Excel.Application, _
WkbFolder As String, _
FoundFile As String, _
NeededSheets As Scripting.Dictionary, _
ByRef Pass As String) As Boolean
Dim Wkb As Workbook
WkbApp.Visible = False
' Attempts to open the workbook. If it fails, then attempts to get a
' better password from the user. This password is saved for further
' attempts, but only during runtime.
On Error Resume Next
Set Wkb = WkbApp.Workbooks.Open(Filename:=WkbFolder & FoundFile, _
Password:=Pass)
If Err.Number > 0 Then
PasswordUserform.FileNameLabel.Caption = "'" & _
Left(FoundFile, 20) & "...'"
PasswordUserform.Show
Pass = PasswordUserform.PasswordBox.Text
Unload PasswordUserform
Set Wkb = WkbApp.Workbooks.Open(Filename:=WkbFolder & FoundFile, _
Password:=Pass)
End If
On Error GoTo 0
' Do Stuff within workbook, Setting function to True or False depending on contents
End Function
Функция вызывается в простом Do Пока l oop:
Do While Len(FoundFile) > 0
FoundDate = FileDateTime(WkbFolder & FoundFile)
If FoundDate > LatestDate And CheckFiles(WkbApp, WkbFolder, _
FoundFile, NeededSheets, Pass) Then
LatestDate = FoundDate
LatestFile = FoundFile
LatestPass = Pass
End If
FoundFile = Dir
Loop
При переходе через первый Set Wkb
может отображаться или не отображаться пользовательская форма пароля по умолчанию. Если это появляется и отменяется, отображается пользовательский PasswordUserform
. При правильном вводе второй Set Wkb
(в области IF) всегда отображает пользовательскую форму пароля по умолчанию. Но в следующем файле пароль используется правильно, и пользовательская форма не отображается. Наконец, случайный файл создаст пользовательскую форму пароля по умолчанию (при вводе пароля, который должен был быть предоставлен, он открывается нормально, так как все файлы в папке используют один и тот же пароль).
Я попытался установить WriteResPassword
также, без разницы. Кроме того, DisplayAlerts=False
не устраняет проблему.