プロが教えるわが家の防犯対策術!

長文になるかと思いますが、失礼致します。

まず、現状として複数のシートを一気に保護/解除をしたいため色々調べてマクロを組んでみました。
しかし、思うような処理ができず困っています。

【出来るようにしたいこと】
・複数の人が触るファイルだが、一部の人にしか見せたくない部分があるため1~20までの列を非表示にして再表示できないようにしたい。(調べたらシート保護で解決するということでマクロを組んでみた)
・保護をかけても基本的な操作はできるようにしたい(文字の入力や関数の入力等)
・複数のシートを一気に解除する際、パスワードの入力をしないと解除できないようにしたい

上記を踏まえ、今は
Sub 保護()
Dim s As Worksheet
For Each s In ActiveWorkbook.Sheets
s.Protect , AllowFormattingCells:=True
Next s
End Sub

Sub 保護解除()

Dim myPass As Variant
Dim myWS As Worksheet

myPass = InputBox("Password入力")

On Error GoTo エラー
For Each myWS In ThisWorkbook.Worksheets
myWS.Unprotect Password:=1234
Next

Exit Sub

エラー:
MsgBox (myWS.Name & "のパスワードが違います")
End Sub

とマクロを組んでいます。

保護する際は特に問題が無くできるのですが、
解除の際 1234 以外のパスワードや何も入力しなくても解除してしまいます。

マクロに関して無知なため何が駄目なのかどうしたらいいかわからず
今は誰でも解除できてしまう状態で困っています...

宜しければ、このコードでやってみたらいいよ!というのを教えてい頂きたいです。
説明下手で分かりにくいかと思いますが、宜しく御願い致します。

A 回答 (3件)

保護時にパスワードがかかっていないですよね。


No.1さんの回答にプラスして、

s.Protect Password:="1234", AllowFormattingCells:=True

でいけるのではないでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

できました!!!保護解除のほうが間違っているとばかり思っていましたが、保護時にパスワードの設定が必要なのですね。
ありがとうございました!!

お礼日時:2019/06/13 16:32

No2さん補足ありがとうございます


ホントですね!保護時にパスワードがかかっていませんでした(笑)
    • good
    • 0

1234と記載している部分にmyPassとすれば良いと思いますよ

    • good
    • 0
この回答へのお礼

早速お返事ありがとうございます。
1234の箇所をmyPassに変えてみましたが今まで通り何も入力しなくても解除できてしまいました...
パスワードを1234にし、入力しないと解除できないようにしたいのですが、どうしたらいいでしょうか( ;∀;)

お礼日時:2019/06/13 16:14

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

このQ&Aを見た人はこんなQ&Aも見ています