2010-04-20 144 views
1

我試圖通過VBA打開Excel(xlsm)文件。它可能會或可能不會受到(已知)密碼的保護。我正在使用此代碼:檢查Excel文件是否受密碼保護

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 

這適用於不受保護和受保護的文件。但是如果用戶輸入了錯誤的密碼,它會進入第二行並彈出我不想要的「輸入密碼」提示。

如何解決這個問題?

+0

您是否檢查過「Err.Number」?如果密碼錯誤/文件不受保護,你可能會得到不同的結果嗎? – 2010-04-20 06:34:40

+0

我檢查過,Excel總是給出錯誤1004(應用程序特定的錯誤)。不幸的是,即使錯誤描述是相同的。 – 2010-04-20 07:10:25

回答

0
  1. 專門針對此特定問題使用1004錯誤處理,並在子錯誤中繼續使用其他所有錯誤。

  2. 以上聲明Workbooks.Open filename, Password:=user_entered_pw 還添加了另一個沒有密碼參數的行語句。

  3. 如果這些(或它們的組合)不起作用,請嘗試在記事本中搜索.xlsm平面代碼,以獲取PW保護文件與該文件不同的任何提示。在開幕前的功能中使用該信息。

+0

廣告2:當這樣做時,如果文件受密碼保護,則會彈出「輸入密碼」提示。 ad 3 .:如果沒有任何保護處於活動狀態,則可以識別ZIP標頭(文件以「PK」開頭)。如果存在任何保護(VBA項目,工作簿,工作表,開放密碼),則該文件顯然是加密的。因此,不能用帶有工作簿保護的開放密碼來破壞文件(據我所知)。 – 2010-04-28 12:36:15

+0

我不知道你想走多遠,但我可以推薦James L. Conger的「Windows API Bible」,Charles Petzold的「Programming Windows」和Dan Appleman的「Visual Basic程序員指南」。在顯示輸入密碼提示符之前,您可以識別/停止/攔截/響應輸入密碼提示符(以及其他許多事項)。 – user225626 2010-05-06 02:08:47

1

備案 - 原因確實是我打開工作簿時的結構保護。 我可以通過禁用結構保護,並在Workbook_Open()(在受保護的工作簿中)中重新保護來繞過該問題。

如果結構保護處於非活動狀態,即使沒有密碼,使用密碼的Workbooks.Open也不會失敗。

由於我通過VBA方法打開VBA代碼已被信任,這意味着Workbook_Open方法肯定會被調用。

+0

+1發佈自己的發現,這也使得問題值得 – chiccodoro 2010-10-07 08:09:49

相關問題