检查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方法肯定会被调用。

  1. 专门针对此特定问题使用1004error handling,并在子错误中继续下一步。

  2. 在声明Workbooks.Open filename, Password:=user_entered_pw的语句之上Workbooks.Open filename, Password:=user_entered_pw还要添加另一个没有密码参数的行语句。

  3. 如果这些(或它们的组合)不起作用,请尝试在记事本中search.xlsm平面代码,以获得PW保护文件与该文件不同的提示。 在预先打开的function中使用该信息。