检查Excel文件是否受密码保护
我正尝试通过VBA打开一个Excel(xlsm)文件。 它可能会或可能不会受到(已知)密码的保护。 我正在使用这个代码:
On Error Resume Next Workbooks.Open filename, Password:=user_entered_pw opened = (Err.Number=0) On Error Goto 0
现在,如果工作簿有密码,这可以正常工作。 但如果不受保护,则不能打开。 显然,如果工作簿结构保护处于活动状态,则这是XL2007中的一个错误。 ( http://vbaadventures.blogspot.com/2009/01/possible-error-in-excel-2007.html )。 在旧的XL2003上,提供密码将打开无保护和密码保护的文件。
我试过了:
Workbooks.Open filename, Password:=user_entered_pw If (Err.Number <> 0) Then workbooks.open filename
这适用于不受保护和受保护的文件。 但是,如果用户input了错误的密码,它会进入第二行,popup“我不想要的input密码”提示。
如何解决这个问题?
logging – 原因实际上是我打开工作簿的结构保护。 我可以通过禁用结构保护来避免这个问题,并在Workbook_Open()(在受保护的工作簿中)中进行重新保护。
结构保护处于非活动状态时,即使没有密码, Workbooks.Open
与密码也不会失败。
由于我通过VBA方法打开,所以VBA代码已经被信任,这意味着Workbook_Open方法肯定会被调用。
-
专门针对此特定问题使用1004error handling,并在子错误中继续下一步。
-
在声明
Workbooks.Open filename, Password:=user_entered_pw
的语句之上Workbooks.Open filename, Password:=user_entered_pw
还要添加另一个没有密码参数的行语句。 -
如果这些(或它们的组合)不起作用,请尝试在记事本中search.xlsm平面代码,以获得PW保护文件与该文件不同的提示。 在预先打开的function中使用该信息。