2015-03-30 3 views
0

Я пытаюсь открыть файл в VBA. Я использую следующий код.Не удалось обойти пароль в окне открытия файла

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
myArray = ActiveSheet.Range("M1:M5") 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 
fd.InitialFileName = "Desktop" 
fd.InitialView = msoFileDialogViewList 
fd.AllowMultiSelect = True 
FileChosen = fd.Show 

If FileChosen = -1 Then 

For j = 1 To fd.SelectedItems.Count 
    For i = LBound(myArray, 1) To UBound(myArray, 1) 
     Dim wb2 As Workbook 
     Set wb2 = Workbooks.Open(fd.SelectedItems(j), ReadOnly:=True,Password:=myArray(i, 1)) 
     Debug.Print myArray(i, 1) 
     If Not wb2 Is Nothing Then Exit For 
    Next i 
    'Processing the File 
Next j 

End If 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 

End Sub 

Array Содержит мой пароль. Когда я открываю его вручную, он запрашивает пароль для доступа, и когда я ввожу пароль, он снова запрашивает пароль, который предназначен для доступа к записи. Я также получаю возможность читать только второй раз, и я уже поместил это в свой код. Также я дал alll возможные пароли в моем массиве M1: M5. поэтому я не знаю, в чем проблема. Кто-нибудь может мне помочь, пожалуйста? Заранее спасибо.

Редактировать: Выбрасывает ab Ошибка времени выполнения '1004' Неверный пароль. Убедитесь, что ключ блокировки Caps выключен и обязательно используйте правильную заглавную букву. Я также хочу дать понять, что в файле есть два разных пароля.

+0

Я не могу сказать точно, но я думаю, что пароль, который ищет VBA, это пароль защиты рабочей книги (настроенный в файле Excel), а не пароль уровня Windows, который, как вам кажется, установлен , – guitarthrower

+0

Я установил все пароли на листе excel только с того места, где я запускаю код. Также все файлы открываются, когда я напрямую использую путь и открываю – Jain

ответ

0
Set wb2 = Workbooks.Open(fd.SelectedItems(j), ReadOnly:=True,Password:=myArray(i, 1)) 

только один пароль Password:=myArray(i, 1). Поскольку требуется два пароля, вам нужно будет указать другой, а также WriteResPassword:=<something>.

MS docs От:

WriteResPassword Строки, содержащей пароль, необходимую для записи в записи зарезервированных книг. Если этот аргумент опущен , а рабочей книге требуется пароль, , пользователю будет предложено ввести пароль.

какакцент добавил

Я считаю, тот факт, что вы с указанием ReadOnly:=True будет держать его только для чтения, но кто-то должен указать Write пароль, код или вашего пользователя.

Он смотрит на меня, как ваш код петли

For i = LBound(myArray, 1) To UBound(myArray, 1) 
    Set wb2 = Workbooks.Open(fd.SelectedItems(j), ReadOnly:=True,Password:=myArray(i, 1)) 
    Debug.Print myArray(i, 1) 
    If Not wb2 Is Nothing Then Exit For 
Next i 

пытается открыть каждый файл, выбранный с каждым паролем. Я бы предположил, что вы еще не ударили какие-либо ошибки, потому что ваш первый пароль предоставлен в соответствии с первым выбранным файлом. Как только это не произойдет, ваш цикл выйдет, и вы никогда не сможете попробовать другой пароль в этом первом файле.

Кроме того, в качестве примечания, я бы рекомендовал переместить Dim wb2 As Workbook из петель - положите его в верхней части кода.

+0

. Между тем я уже пробовал все, что вы предложили. То, что я сделал, представляло K как другую переменную и вводило еще один цикл внутри i и помещало WriteResPassword = myArray (k, 1). Это неправильно, потому что я снова получаю ту же ошибку? , Я думаю, что положить две петли должны проверить все возможные пароли правильно? это будет всего три петли. – Jain

+0

Добавление другого цикла и попытка открыть книгу снова, передав другой пароль, не поможет.Вам нужно передать оба пароля при открытии файла: 'Set wb2 = Workbooks.Open (fd.SelectedItems (j), ReadOnly: = True, Password: = myArray (i, 1)), WriteResPassword: = '. '' может быть 'myArray (i, 2)' (я предполагаю, так как у вас есть 2-мерный массив, но не показывал, что вы заселяете в нем), или он может храниться где-то в другом месте. – FreeMan

Смежные вопросы