[[20070424102930]] 『Unprotectでパスワード不整合の場合』(sau) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Unprotectでパスワード不整合の場合』(sau)
Excel2000 Windows2000(SP4)

初めて質問します。よろしくお願いします。

ActiveSheet.Unprotect Password:=frmPs.txtLockPw

↑上記コードでシート保護の解除を行っています。
パスワードが不整合の場合、Excel(VB?)のメッセージボックスが表示され
デバッグor終了するしかない状態になります。

OnErrorなどで処理を続行したいのですが、どうしたらよいでしょうか?


 そのコードの前に frmPs.txtLockPw の値をチェックすれば
 よいのでは?

 If frmPs.txtLockPw.Text <> "Password" Then
      MsgBox "もう一度"
 End If
 とか
 (seiya)

返信ありがとうございます。

パスワードは固定ではないため、判定することが出来ません。
(毎月変わります)
シートのパスワードを取得・・・なんて出来ないですよね(>_<)


 それじゃ、パスワードの意味がないでしょう。
 (seiya)

すみません、補足します。

対象となるファイルは月次報告書です。(合計100ファイル程度)毎月月末に集計処理を行います。本ソースはその集計処理のツールです。
ファイルのパスワードは年月(200704)で、毎月かわるため、処理前にfrmPs.txtLockPwに手入力しておきます。

基本的に「年月」でパスワードがつけられているはずですが、時々入力ミスで間違ったパスワードをつける人がいます。そのような場合の対処を入れたいのですが、上記のようになり困っています。


 1) sauさん、投稿の際はHNを記入してください。

 2) >時々入力ミスで間違ったパスワードをつける人がいます。
 これは、「間違ったパスワードで保護されてしまう」ということですか?
 それとも、「保護解除時のパスワードの入力を間違える」ということですか?

 後者なら、

 If frmPs.txtLockPw <> Year(Date) & format(Month(date),"00") Then
      MsgBox "もう一度"
 End If
 てな感じだと思いますが?

 前者の場合は、無理でしょう。
 (パスワードの解読コードをネット上からでも入手して下さい)
 (seiya)

seiyaさん、何度もありがとうございます。HNの件、申し訳ありませんでした。以後気をつけます。

2)「間違ったパスワードで保護されてしまう」ということです。

まとめると

ActiveSheet.Unprotect Password:=frmPs.txtLockPw

↑で、ファイルと異なるパスワードを指定した場合はVBのエラーメッセージが表示される。これを回避する方法はない。

という結論で合っていますか?(sau)


 いまひとつ、問題がはっきりしません...

 1) ユーザーがシートの保護をする時点で予期しない文字列をパスワードに
 してしまう(解読不能)

 2) 保護解除のパスワードを間違えてしまう

 どちらですか?
 ご提示のコードからは 2)のように思います。
 それでしたら、私の提示したコードでよいのでは?
 (seiya)

説明下手で何度もお手を煩わせて申し訳ありません。

 1) ユーザーがシートの保護をする時点で予期しない文字列をパスワードに
 してしまう(解読不能)

です。「パスワードは年月で」という取り決めがあるので、基本的には上記ソースで解除出来るはずですが、中には違うパスワードで保護したファイルを提出してくる人もいるので、その場合は上記個所でエラーになってしまいます。

解除用パスワードをfrmPs.txtLockPwから取得する、という流れはあまり気にしないでください。解除用パスワードが毎月変わるので、過去のファイルを処理したい時のために手入力可能としているだけで、ここの入力が不備ということは考慮しなくてよいので。(sau)


 「年月」は何を基準に判断するのですか?

 If frmPs.txtLockPw.Text <> Format(Date,"yyyymm") Then
      MsgBox "もう一度"
 Else
      ActiveSheet.Protect frmPs.txtLockPw.Text
 End If

 基準がはっきりしないとわかりません。
 (seiya)

Protectということは、提示してくださったのは保護する時のソースですか?保護する時は各個人が手作業で保護します。年月は、月次報告書の年月(07年3月度の報告ならば200703)です。

とりあえず1番最初に提示したソースは忘れていただいて、、、
"ABC"というパスワードで保護されたシートに対し

ActiveSheet.Unprotect Password:="def"

という処理を行った場合、VBのエラーメッセージを出さずにプログラム内でエラー処理を行う事は出来るか?

というのが質問です。本当に何度もすみません。(sau)


 ですから、間違える前に予防することです!
 間違って、保護してしまったら解読不可能になりますよ?
 (パスワード解析コードを入手して、いちいち取り出すなら別ですが、
 もしそれをしたいのならご自分でどうぞ、こちらで回答を載せること
 は控えますし、載せるべきではないと思います)
 (seiya)

 「パスワード解析コードを」というご要望ではないとして、、。

 Unprotect文の前に、On Error Goto 文 を置いて、エラーの場合は
 主ルーチンを抜け、

 Msgbox "パスワードが違うのでプログラムを終了します"
 Exit sub

 というサブルーチンを実行させる。というような事ではないですか?
 Unprotect文の後には、On Error Goto 0 を書いた方がいいかも。
 
 いずれにしても、間違ったパスワードが入らないようにすべきという、
 seiyaさんの意見はもっともと思います。
 
(純丸)(o^-')b

 seiyaさん

 100ファイルを一度に処理しますので、エラーとなったファイルは飛ばして
 他のファイルの処理を続行したいのですが、現状では止まってしまうので
 回避できないかと考えました。

 初めのほうの
 >シートのパスワードを取得・・・なんて出来ないですよね(>_<) 
 という書き込みが不適切でした。申し訳ありません。
 パスワードの解析などは考えておりません。エラー(不整合)の判断が
 したかっただけです。

 >ですから、間違える前に予防することです!
 おっしゃるとおりです。現状は先ほど書いたような手順となっていますので、
 今後の運用を改善するべく提案します。(sau)


 >中には違ったパスワードで保護したファイルを提出....
 私が最も気にかかるのはこの点です。
 これを、「予防する」という意味です。
 (seiya)

 純丸さん
 返信ありがとうございます。
 On Error Goto文を入れても状況は同じなのです。。。(sau)

 Application.DisplayAlerts = False と併用でも
 無理なのでしょうね...
 (seiya)

 seiyaさん
 Application.DisplayAlertsも入れてみましたが
 結果は変わらずでした。


 もしかして…
 VBEの「ツール」―「オプション」の「全般」タブで「エラートラップ」が「エラー発生時に中断」になっていませんか?

 これを「エラー処理対象外のエラーで中断」にするとOn Errorで抜けられると思いますが。
 (独覚)

 1) シート全体をコピー
 2) データをどこかに一時避難
 3) 処理
 なんてことはできませんか?
 (seiya)

 独覚さん
 「エラー処理対象外のエラーで中断」の設定になってました。

 当初の質問事項である、Unprotectに違うパスワードを指定した場合の
 回避策はないようですので、seiyaさんが提示してくださった案で
 試してみようと思います。

 どうもありがとうございました。(sau)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.