• ベストアンサー

VBAでファイルの読み取り保護を判定するには?

VBAでファイルの読み取り保護を判定するには? エクセルVBAで開いたexcelファイルに保存オプションで指定する「読み取りパスワード」が設定されているか否かを判定するにはどの様な記述をするのでしょうか。 ブックの保護非保護判定は、質問番号:2285577 moooonさんの質問にあるのですが・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • crossgate
  • ベストアンサー率65% (78/119)
回答No.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)

badmi24
質問者

お礼

crossgateさんへ 色々、ご教授有難うございました! お蔭様で、「Err.Clear」を指定し遂に完成しました。 再々ありがとうございました。 助かりました!

その他の回答 (3)

  • crossgate
  • ベストアンサー率65% (78/119)
回答No.3

crossgateです。 >確認したところ、ブック保護されたファイルをOPENしても同様の「Err.Description, "入力したパスワードは間違っています。"」が返ってきてしまうのですが、判別の方法はありませんでしょうか。 ブック保護というのは、Excelのメニューから「ツール」→「保護」→「ブックの保護」で設定する保護のことですよね? こちらでも#1のロジックで確認しましたが、普通に開けました。 badmi24さんに確認です。 ・開こうとしているファイルは読み取りパスワードが設定されていない(ブックの保護だけしている)ファイルですか? ・Officeのバージョンが違うと動きが違うのかもしれません。どのバージョンを使っていますか?  (ちなみに私はOffice2003です)

badmi24
質問者

補足

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)
回答No.2

こんにちは。 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)
回答No.1

美しくない対処ですが、これでも一応できますね。 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

badmi24
質問者

補足

早々、回答頂き有難うございました。 確認したところ、ブック保護されたファイルをOPENしても同様の「Err.Description, "入力したパスワードは間違っています。"」が返ってきてしまうのですが、判別の方法はありませんでしょうか。

関連するQ&A

専門家に質問してみよう