Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vba循环中使用密码打开Excel文件_Excel_Vba - Fatal编程技术网

在vba循环中使用密码打开Excel文件

在vba循环中使用密码打开Excel文件,excel,vba,Excel,Vba,我有一个循环,从100多个工作簿中抓取数据。有些为工作簿和工作表提供密码保护 我以为我已经添加了代码来输入每个工作簿的密码,它一直在工作,直到我将代码更改为查看文件夹及其子文件夹,而不是单个文件夹,但现在所有带有密码的文件都会弹出一个窗口来输入密码 我想我没有在正确的位置输入密码。我曾尝试将其移动到“For each of ile”等之前,但在设置“wb”而不给出错误之前,我不确定如何执行此操作 任何帮助都将不胜感激 Sub Test_Macro() Dim wb As Workbook

我有一个循环,从100多个工作簿中抓取数据。有些为工作簿和工作表提供密码保护

我以为我已经添加了代码来输入每个工作簿的密码,它一直在工作,直到我将代码更改为查看文件夹及其子文件夹,而不是单个文件夹,但现在所有带有密码的文件都会弹出一个窗口来输入密码

我想我没有在正确的位置输入密码。我曾尝试将其移动到“For each of ile”等之前,但在设置“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
子测试_宏()
将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(,密码:=)
Try
Set wb=Workbooks.Open(Filename:=OFile.path,密码:=“password”)