检查Excel文件是否受密码保护

时间:2010-04-20 06:18:10

标签: excel vba

我正在尝试通过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

这适用于不受保护和受保护的文件。但是,如果用户输入了错误的密码,它将进入第二行并弹出“输入密码”提示,这是我不想要的。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

为了记录 - 原因确实是我正在开放的工作簿的结构保护。 我可以通过禁用结构保护来解决问题,并在Workbook_Open()(在受保护的工作簿中)中重新保护。

如果结构保护处于非活动状态,即使没有密码,带有密码的Workbooks.Open也不会失败。

由于我是通过VBA方法打开的,因此VBA代码已经被信任,这意味着肯定会调用Workbook_Open方法。

答案 1 :(得分:0)

  1. 仅针对此特定问题使用1004错误处理,并为Sub中的其他所有内容使用On Error Resume Next。

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

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