Vba 无法在打开文件时绕过密码提示

Vba 无法在打开文件时绕过密码提示,vba,excel,Vba,Excel,我正在尝试用VBA打开一个文件。我正在使用以下代码 Application.ScreenUpdating = False Application.DisplayAlerts = False myArray = ActiveSheet.Range("M1:M5") Set fd = Application.FileDialog(msoFileDialogFilePicker) fd.InitialFileName = "Desktop" fd.InitialView = msoFileDialo

我正在尝试用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
数组包含我的密码。当我手动打开它时,它会要求输入访问密码,当我输入密码时,它会再次提示输入用于写访问的密码。我还可以选择只读第二次,我已经把它放在我的代码中了。我还提供了数组M1:M5中所有可能的密码。所以我不知道问题出在哪里。有人能帮我吗?提前谢谢

编辑:它抛出ab运行时错误“1004” 您提供的密码不正确。确认Caps lock(大写锁定)键已关闭,并确保使用正确的大写字母。我还想澄清一下,文件中有两个不同的密码

Set wb2 = Workbooks.Open(fd.SelectedItems(j), ReadOnly:=True,Password:=myArray(i, 1))
仅提供一个密码:=myArrayi,1。因为需要两个密码,所以您需要提供另一个密码,以及WriteResPassword:=

从:

WriteResPassword包含写入保留工作簿所需密码的字符串。如果省略此参数并且工作簿需要密码,则系统将提示用户输入密码

双方都强调了这一点

我相信,指定ReadOnly:=True将使其保持只读,但必须有人指定写入密码、代码或用户

在我看来,它就像你的循环代码

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工作簿从循环中移出-将其放在代码的顶部。

我不能确定,但我认为VBA正在寻找的密码是Excel文件中设置的工作簿保护密码,而不是Windows级别的密码,这就是您似乎已经设置的。我在excel表中只从运行代码的地方设置了所有密码。另外,当我直接使用path和open时,所有文件都会打开。同时,我已经尝试了您建议的任何方法。我所做的是引入K作为另一个变量,在i中引入一个循环,并将WriteResPassword=myArrayk,1。是不是因为我又犯了同样的错误。我认为放置两个循环应该检查所有可能的密码,对吗?总共将有三个循环。添加另一个循环并尝试通过传递其他密码再次打开工作簿将无济于事。打开文件时需要传递两个密码:Set wb2=Workbooks.Openfd.SelectedItemsj,ReadOnly:=True,Password:=myArrayi,1,writerespacsword:=。我猜可能是myArrayi,2,因为你有一个二维数组,但没有显示你在其中填充了什么,或者它可能存储在其他地方。