Откройте файл Excel с паролем в цикле VBA - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть цикл, который собирает данные из более 100 книг.У некоторых есть защита паролем для рабочих книг и рабочих листов.

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

Я предполагаю, что не вписываю пароль в нужную точку.Я пытался переместить его перед «Для каждого OFile» и т. Д., Но я не уверен, как это сделать, прежде чем установить «wb» без ошибок.

Любая помощь будет принята с благодарностью!

Sub Test_Macro()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim fso, oFolder, oSubfolder, OFile, queue As Collection
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set queue = New Collection
    queue.Add fso.GetFolder("D:\example\example")
'^^^ UPDATE THIS FILE PATH TO FOLDER WHERE THE RETURNED SCORECARDS ARE STORED.

Do While queue.Count > 0
Set oFolder = queue(1)
queue.Remove 1 'dequeue
For Each oSubfolder In oFolder.SubFolders
queue.Add oSubfolder
Next oSubfolder

For Each OFile In oFolder.Files

y = ThisWorkbook.Sheets("Consol").Cells(Rows.Count, 1).End(xlUp).Row + 1 '<<< Finda next available row containing a value in consol sheet

Set wb = Workbooks.Open(OFile.path) '<<< Sets variable to the open performance scorecard and unprotects
wb.Password = "Password" '<<<<This is one that doesn't appear to be working

Set ws = wb.Sheets("Detailed Summary") '<<< Defines sheet in the open scorecard to scrape from

ws.Unprotect Password:="Password"

wsLR = ws.Columns("B").Find("*", after:=ws.Cells(1, 2), SearchDirection:=xlPrevious, SearchOrder:=xlByRows, LookIn:=xlValues).Row '<<< Defines the range containing data in the open scorecard
Dim scraped As Variant
With ws
scraped = .Range(.Cells(5, 2), .Cells(wsLR, 85))
End With

Dim consolRng As Range
Set consolRng = ThisWorkbook.Sheets("Consol").Cells(y, 1)

Set consolRng = consolRng.Resize(rowsize:=UBound(scraped, 1), columnsize:=UBound(scraped, 2))
consolRng = scraped

wb.Close (Saved = True)

Next OFile

Loop

End Sub

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 28 февраля 2019

Согласно документации MSDN , одним из аргументов метода Open является password.

Set wbk = Workbooks.Open(FileName:=yourfilename, Password:=yourPassword)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...