[英]excel vba to open a workbook by testing multiple passwords
我在目录中有受密码保护的.xls文件。 我想打开每个文件并保存它们而无需输入密码。
但是,可以使用下面列出的任一示例密码来打开文件。
pwd1 = "123"
pwd2 = "456"
pwd3 = "789"
'Check if pwd1 opens
Application.Workbooks.Open(Filename:=fn, Password:=pwd1)
'If fail then use pwd2
Application.Workbooks.Open(Filename:=fn, Password:=pwd2)
'and so on..
我应该如何实施呢?
一旦文件被打开一次,您只需要Unprotect
它。 这将节省大量时间,而不是不断打开/关闭工作簿。
这是我的处理方式:
Public Sub CrackWorkbook()
Dim fn As String
fn = "C:\Temp\test_password_is_456.xlsx"
Dim wb As Workbook
Set wb = Workbooks.Open(fn)
Dim lst As Variant
lst = Array("123", "456", "789")
Dim item As Variant
For Each item In lst
On Error GoTo did_not_work
Call wb.Unprotect(item)
Call wb.Save
Call wb.Close(False)
Exit Sub
did_not_work:
On Error GoTo 0
Next item
End Sub
换句话说,创建一个字符串数组并对它们执行一个For Each
,并设置一些错误处理以处理所有失败的尝试。
我知道GoTo
语句有点麻烦,但这是处理VBA中错误的最佳方法(据我所知)。
我尝试了@lebelinoz答案,但是例程给出了1004错误。 我用谷歌搜索了这种行为并找到了这个帖子: https : //stackoverflow.com/questions/21176638/vba-how-to-force-ignore-continue-past-1004-error
下面的代码通过使用On Error Resume Next
。 我基于@lebelinoz答案。
Public Sub CrackWorkbook()
Dim fn As String
fn = "C:\Temp\test_password_is_456.xlsx"
Dim wb As Workbook
Dim item As Variant
Dim lst As Variant
lst = Array("123", "456", "789")
For Each item In lst
On Error Resume Next
Workbooks.Open Filename:=fn, Password:=item
If Err.Number <> 0 Then GoTo did_not_work:
Exit For
did_not_work:
Next item
Set wb = Activeworkbook
wb.SaveAs Filename:=fn, Password:=""
wb.Close
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.