- 締切済み
シートの保護解除を、変数で試したい
はじめて質問します。よろしくお願いします。 常用のパスワードを配列に準備しておき、 ActiveSheet.Unprotect Password:=mystrを実行して、保護解除ができない場合に、 パスワードを変更するようにエラー処理をして、適合するパスワードを探すようにしました。 結果、excel20101では、予定の動きをするのですが、 excel2007では、(1)を実行後、パスワードを求めるダイアログがでて、(2)以降を実行してしまいます。 Public Sub test() tt = False ps = Array("test", "rrr", "1234", "123", "qqq") p = 0 mystr = "" Application.DisplayAlerts = False Worksheets(1).Activate On Error GoTo e1 ActiveSheet.Unprotect Password:=mystr '・・・・(1) On Error GoTo 0 Application.DisplayAlerts = True '・・・・(2) MsgBox mystr tt = True Exit Sub e1: '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・(3) If p < UBound(ps) Then mystr = ps(p) p = p + 1 Resume Else mystr = InputBox("??", "EE", "") If mystr = "" Then Exit Sub Else Resume End If End If End Sub この Application.DisplayAlerts = False や On Error GoTo によるエラー処理は、 1 2010では機能するのに、2007では機能していないのでは? *どこかに、設定する場所があるのでしょうか。 2 2007でも、シート保護の解除以外の時では、この記述で機能するのですが・・・・ <やりたいこと> 複数のユーザー作成のBookは、それぞれのパスワードが決まっている。ユーザーごとのパスワードをマクロで解除したいのですが、うまくいきません。 だらだらと、長い文章で分かりにくい質問ですが、どなたか、ご教授をお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7941)
今のマクロで 変更前: mystr = "" 変更後: mystr = "+" などのように,空白ではなく「間違ったパスワード」をmystrの初期値にして作動させてみてください。 Excel2007では, activesheet.unprotect password:="" という操作を行うと,パスワードが入力されていないとみなしてパスワードの入力を求めますね。 パスワードを付けて保護したシートに対して,ただ activesheet.unprotect と命じたのと同じ動作をしています。 #間違ったパスワードを使ってUnprotectを試みると,意図通りその後エラーセクションにジャンプします。