- ベストアンサー
VBAでファイルの読み取り保護を判定するには?
VBAでファイルの読み取り保護を判定するには? エクセルVBAで開いたexcelファイルに保存オプションで指定する「読み取りパスワード」が設定されているか否かを判定するにはどの様な記述をするのでしょうか。 ブックの保護非保護判定は、質問番号:2285577 moooonさんの質問にあるのですが・・・
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
crossgateです。 >■で再度のQで恐縮ですが、読取りパスワード設定したファイルをOPENすると、確かに > Err.Number = 1004 > Mid(Err.Description, 1, 18) = "入力したパスワードは間違っています。" となります。 >が、パスワードの入力誤りでも同じになってしまうので何か判別する良い方法はありませんでしょうか? これは、1回目のWorkbooks.Openのエラー情報が残っているためです。 (2回目のWorkbooks.Openがエラーになっている訳ではないです。) >'(10)----------- エラーのため再度パスワード設定なしでOPENする。 >Set CHK_BOOK = Workbooks.Open(IN_FILE_NAME, , True) このロジックを、以下のとおり変更してください。 ------------------------------------------------------- '(10)----------- エラーのため再度パスワード設定なしでOPENする。 Err.Clear '##########この行を追加するだけです。########## Set CHK_BOOK = Workbooks.Open(IN_FILE_NAME, , True)
その他の回答 (3)
- crossgate
- ベストアンサー率65% (78/119)
crossgateです。 >確認したところ、ブック保護されたファイルをOPENしても同様の「Err.Description, "入力したパスワードは間違っています。"」が返ってきてしまうのですが、判別の方法はありませんでしょうか。 ブック保護というのは、Excelのメニューから「ツール」→「保護」→「ブックの保護」で設定する保護のことですよね? こちらでも#1のロジックで確認しましたが、普通に開けました。 badmi24さんに確認です。 ・開こうとしているファイルは読み取りパスワードが設定されていない(ブックの保護だけしている)ファイルですか? ・Officeのバージョンが違うと動きが違うのかもしれません。どのバージョンを使っていますか? (ちなみに私はOffice2003です)
補足
crossgateさんへ Qのアンサー遅くなり失礼しました。 ★指摘の通り、テストファイルの作成ミスで、読み取りパスワードの設定+ブックの保護設定を行ったファイルでした。ゴメンナサイ! (こちらもOffice2003です) ■で再度のQで恐縮ですが、読取りパスワード設定したファイルをOPENすると、確かに Err.Number = 1004 Mid(Err.Description, 1, 18) = "入力したパスワードは間違っています。" となります。 が、パスワードの入力誤りでも同じになってしまうので何か判別する良い方法はありませんでしょうか? ■■■今、こんなコーディングをしてます。(11)で判定したいのですが・・・■■■ '任意のExcelファイルをopenし、(1)ファイル保護の有無,(2)ブックの保護の有無を元のexcelシートに表示する。 FILE_PW = 0 Application.EnableEvents = False On Error Resume Next Set CHK_BOOK = Workbooks.Open(IN_FILE_NAME, , True, , "") If Err.Number = 1004 And Mid(Err.Description, 1, 18) = "入力したパスワードは間違っています。" Then '(10)----------- エラーのため再度パスワード設定なしでOPENする。 Set CHK_BOOK = Workbooks.Open(IN_FILE_NAME, , True) '////////////// '(11)----------- ★ ここで、正しいパスワードが入力されてOPENが正常に行ったのか、 '(11)----------- ★ それとも、パスワードの入力エラーでOPENか異常であったかを判定したい!★ '////////////// If Err.Number = 1004 And Mid(Err.Description, 1, 18) = "入力したパスワードは間違っています。" Then FILE_PW = 1 ' 1:パスワード設定あり Err.Number = 0 End If End If '----------- OPENエラーの確認 '----------- エラー発生時は、処理を中止する If Err.Number <> 0 Then MsgBox "ファイルOPENエラー " & IN_FILE_NAME & " Err.Number=" & Err.Number & " " & _ vbCrLf & Err.Description, vbOKOnly + vbExclamation, "確認" Application.EnableEvents = True Exit Sub End If On Error GoTo 0 'エラートラップのリセット OWN_BOOK.Activate '-------- ファイルの保護の確認 If FILE_PW = 1 Then OWN_SHEET.Range("E3").Value = "ファイル保護あり" Else OWN_SHEET.Range("E3").Value = "ファイルの保護なし" End If '-------- ブック保護の確認 If CHK_BOOK.ProtectStructure = True Then OWN_SHEET.Range("E4").Value = "ブック保護あり" Else OWN_SHEET.Range("E4").Value = "ブック保護なし" End If
- pkh4989
- ベストアンサー率62% (162/260)
こんにちは。 DAO を使うと判定ができるかもしれません。 但し、DAO の参照設定が必要です。 ファイルに読み取りパスワードが設定されている場合は、「ファイルを解読できませんでした」という エラーになります。 Sub パスワード判定() Dim Db As database On Error Resume Next Set Db = Workspaces(0).OpenDatabase("C:\Temp\Book1.xls", False, False, "Excel 8.0") If Err.Number <> 0 Then MsgBox Err.Number & ":" & Err.Description End If Db.Close Set Db = Nothing End Sub
- crossgate
- ベストアンサー率65% (78/119)
美しくない対処ですが、これでも一応できますね。 Sub BookOpenTest() 'エラーが起きても処理継続するように設定変更 On Error Resume Next 'ブックオープン。最後の""はパスワード 'パスワード設定されてないBookはこれでもオープンできる。 'パスワード設定されているBookは最後の""を省略するとパスワードの入力を求められる。 Workbooks.Open "C:\Book1.xls", , , , "" 'エラーメッセージが「オープン時のパスワード間違い」かチェック If 1 = InStr(Err.Description, "入力したパスワードは間違っています。") Then MsgBox "パスワード設定されてた" ElseIf Err.Number <> 0 Then MsgBox "その他のエラーが起きた" & vbCrLf & Err.Description Else MsgBox "パスワード設定されてなかった" End If 'エラーが起きたら処理を止めるように設定変更 On Error GoTo 0 End Sub
補足
早々、回答頂き有難うございました。 確認したところ、ブック保護されたファイルをOPENしても同様の「Err.Description, "入力したパスワードは間違っています。"」が返ってきてしまうのですが、判別の方法はありませんでしょうか。
お礼
crossgateさんへ 色々、ご教授有難うございました! お蔭様で、「Err.Clear」を指定し遂に完成しました。 再々ありがとうございました。 助かりました!