在vba循环中使用密码打开Excel文件
我有一个循环,从100多个工作簿中抓取数据。有些为工作簿和工作表提供密码保护 我以为我已经添加了代码来输入每个工作簿的密码,它一直在工作,直到我将代码更改为查看文件夹及其子文件夹,而不是单个文件夹,但现在所有带有密码的文件都会弹出一个窗口来输入密码 我想我没有在正确的位置输入密码。我曾尝试将其移动到“For each of ile”等之前,但在设置“wb”而不给出错误之前,我不确定如何执行此操作 任何帮助都将不胜感激在vba循环中使用密码打开Excel文件,excel,vba,Excel,Vba,我有一个循环,从100多个工作簿中抓取数据。有些为工作簿和工作表提供密码保护 我以为我已经添加了代码来输入每个工作簿的密码,它一直在工作,直到我将代码更改为查看文件夹及其子文件夹,而不是单个文件夹,但现在所有带有密码的文件都会弹出一个窗口来输入密码 我想我没有在正确的位置输入密码。我曾尝试将其移动到“For each of ile”等之前,但在设置“wb”而不给出错误之前,我不确定如何执行此操作 任何帮助都将不胜感激 Sub Test_Macro() Dim wb As Workbook
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
子测试_宏()
将wb设置为工作簿
将ws设置为工作表
Dim fso、oFolder、oSubfolder、OFile、队列作为集合
设置fso=CreateObject(“Scripting.FileSystemObject”)
设置队列=新集合
queue.Add fso.GetFolder(“D:\example\example”)
“^^^将此文件路径更新到存储返回记分卡的文件夹。
排队时执行此操作。计数>0
文件夹集=队列(1)
队列。删除1'出列
对于oFolder.SubFolders中的每个oSubfolder
队列。添加oSubfolder
下一个oSubfolder
对于oFolder.Files中的每个文件
y=ThisWorkbook.Sheets(“Console”).Cells(Rows.Count,1)。End(xlUp)。Row+1'根据,打开方法的参数之一是密码
Set wbk = Workbooks.Open(FileName:=yourfilename, Password:=yourPassword)
打开工作簿时应提供密码,而不是在此之后。Workbooks.Open(,密码:=)
TrySet wb=Workbooks.Open(Filename:=OFile.path,密码:=“password”)