打开多个受密码保护的工作簿

时间:2019-07-25 21:11:01

标签: excel vba

尝试打开多个受密码保护的excel工作簿。我有一个具有宏的主wb。它有一个标记为“仪表板”的工作表。在此工作表中,所有文件的文件目录在顶部列出。目录下面有两列。左列列出了文件名,其旁边的一列列出了每个文件的密码。我正在尝试创建一个将打开所有文件的循环。我需要它来刷新其中包含的数据。任何帮助将不胜感激!

尝试了多种Do while循环安排,但都产生了错误。


Dim mainwb As Workbook
Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim pw As String
Dim myExtension As String

Set mainwb = ThisWorkbook

myPath = ActiveSheet.Range("C1")
myExtension = ".xlsx"
myFile = ActiveCell
pw = ActiveCell.Offset(0, 1)

'Optimize Macro Speed
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual

ThisWorkbook.Sheets("Dashboard").Range("A4").Select

Do While myFile <> ""

     Set wb = Workbooks.Open(Filename:=myPath & myFile & myExtension, Password:=pw)

     ThisWorkbook.Worksheets("Dashboard").Activate
     ActiveCell.Offset(1, 0).Activate

Loop

End Sub

1 个答案:

答案 0 :(得分:0)

这将打开“仪表板”工作表中列出的所有文件(我假设您有5个文件,请更改循环以匹配您的文件):

myPath = mainwb.Sheets("Dashboard").Range("C1")
myExtension = ".xlsx"

For i = 4 to 8
    myFile = ThisWorkbook.Sheets("Dashboard").Range("A" & i).Value
    pw = ThisWorkbook.Sheets("Dashboard").Range("B" & i).Value
    Workbooks.Open Filename:=myPath & myFile & myExtension, Password:=pw
next i

您可能还想在结束子任务之前重置屏幕更新,事件和计算:

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic