アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

エクセルVBAで開いたexcelファイルに保存オプションで指定する「読み取りパスワード」が設定されているか否かを判定するにはどの様な記述をするのでしょうか。

ブックの保護非保護判定は、質問番号:2285577 moooonさんの質問にあるのですが・・・

A 回答 (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)
    • good
    • 0
この回答へのお礼

crossgateさんへ

色々、ご教授有難うございました!

お蔭様で、「Err.Clear」を指定し遂に完成しました。 再々ありがとうございました。 助かりました!

お礼日時:2010/07/26 16:26

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

補足日時:2010/07/26 11:26
    • good
    • 0

こんにちは。



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
    • good
    • 0

美しくない対処ですが、これでも一応できますね。




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, "入力したパスワードは間違っています。"」が返ってきてしまうのですが、判別の方法はありませんでしょうか。

補足日時:2010/07/22 15:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!