• ベストアンサー

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

  • VBAでブック保護非保護を判定するには?

    エクセルVBAでブックが保護されているのかどうかを判定するにはどう書けばいいのでしょうか? If ActiveWorkbook.Protect Then ではだめでした。 また、シート保護の判定方法も教えてください。

  • VBA マクロ保護

    VBA マクロ保護 VBAProject 保護はツールにて保護パスワード設定しています! 私が作ったもので、コマンドボタンをクリックしたら指定された フォルダにコピー(例;Sheet1のみコピー)できるようにしています! そこのコピーのフォルダを開き、ブックを開いてみると シート保護はされていますが コードの表示にパスワード設定がなく、そのまま見えてしまいます。 そこで質問なのですが コードの表示を見れなくさせるために VBA記述でコピーするときにVBAProjectにパスワード設定させたいです。 ちなみにVBAProject本体には、パスワード設定しています。 どのようにすれば良いか?記述を教えてください!

  • VBAプロジェクトの保護

    エクセル2002使用です。 VBAプロジェクトの保護と解除を繰り返しているうちに、保護ができなくなってしまいました。 エクセルの画面でも、セルのロック、シートの保護、ブックの保護を繰り返していました。 何か原因があるのでしょうか? また、別件なのですが、エクセルのオプションでシートの見出しをオフにして、見えなくした状態でブックの保護をかけても、保護をかけた状態でオンにできてしまいます。操作できないようにするにはどのようにしたらよいのでしょうか? エクセルとVBEの保護について詳しいHPをお知りでしたら教えてください。

  • VBAProjectへの保護の設定

    Excel2000 Win2000 Excelマクロから他のExcelブックの VBAProjectへ保護とパスワードを設定したいのですが、 方法はありますか? また、保護を外すのもしたいです。 マクロの保存ではコードが保存されませんでした。

  • エクセルファイルの保護

    エクセルファイルのパスワードでの保護は、名前を付けて保存の所で設定と先ほどご教示頂、又 以前 設定をした事もありますが、ファイル→名前を付けて保存の次の設定)が出ません、何故か エクセル97、エクセルXP共に シート、ブックはツールよりパスワードを設定し、保存が出来ますが

  • VBAでのブック・シートの保護・解除について

    エクセル2010のVBAでのブック、シートの保護&解除の方法について教えて頂きたく、 質問させて頂きます。 消されては困るシートや数式がある関係で、ブックオープン時にVBAでブックとシートにそれぞれパスワードをかけて保護しています。 VBAではシートの削除、作成、コピーなどを行っているため、VBA実行時のみ、保護を解除させるようにしたいと思います。 ただ、対象のシート自体にも入力したい項目があるため、その箇所については保護を解除しておく必要があります。 そして、VBA実行後、再度、その箇所以外にパスワードで保護をかけ直します。 イメージとしては下記のような流れになります。 対象ブック:ブックA 対象シート:シート1 パスワード:1234(それぞれ) 常時保護を解除しておきたいセル:range("A6:H106") 1.(オープン時には、)ブック保護&特定のセル以外のシート保護 2.VBA実行時には全ての保護解除 3.VBA終了時に、1の状態に戻る どうぞよろしくお願い致します。

  • Excelの保護について

    Excelで、新規ブックを保存する際 [ツール] → [全般オプション]で パスワード入力による、ブックの保護ができますよね。 保護されていないブックを保護したい、また逆に保護を解除したい場合 どの様な操作をすれば良いのでしょうか? 現在は、上記の方法で、既存ブックを別名保存しています。 説明が解り辛ければ補足致します。ご回答下さい<(_ _)>

  • VBA グラフの存在の判定について

    お世話になります。 現在VBAの勉強を行っているのですが、グラフについてどうぞ知恵をお貸しください。 エクセルの操作でグラフを作成した後、そのシートもしくはブックにグラフが存在するかどうかを確かめる判定式を作りたいと思っています。 グラフそのものが存在するかどうかの判定をしたい場合、どのような記述が必要になるのでしょうか?

  • Excelブックの保護パスワード判定方法

    VB6.0で、Excelブックが保護パスワードされているかどうかの 判定を行いたいです。 以下のようにHasPasswordプロパティを使用してみたのですが、 保護パスワード付きのExcelブックでテストしてみると Workbooks.Openの部分で処理が止まってしまい、先にすすみません。 基本的にやり方が間違えているんでしょうか? お分かりになる方がいらっしゃいましたら、教えてください。 よろしくお願いします。   Dim xlApp  As Excel.Application   Dim xlBook  As Excel.Workbook   Set xlApp = CreateObject("Excel.Application")   Set xlBook = xlApp.Workbooks.Open("C\:TEST.xls") If xlBook.HasPassword Then Msgbox("保護パスワードあり") Else Msgbox("保護パスワードなし") End If   Set xlSheet = Nothing   xlBook.Close   Set xlBook = Nothing   xlApp.Quit   Set xlApp = Nothing

  • パスワードのかかったEXCELファイルの削除方法

    EXCELのパスワードで質問です。 ツール ⇒ オプションから読み込み、書き込み パスワードを設定しました。 ですがパスワードを忘れてしまい削除したいのに 削除できないと友達に聞かれてます。 私はEXCEL2000の環境でツールオプションにパスワード がないので確認ができないのですがどうなんでしょう? 私の見解では読書きパスワードはファイルを開くのと 上書きなのでプロパティからアクセス制限してなければ 削除できると思うのですが? ブックの保護がかかっていて削除できないということ なんでしょうか?

専門家に質問してみよう