[[20160521084124]] 『保護を二回かけると編集が許可される』(稲葉) ページの最後に飛ぶ

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

 

『保護を二回かけると編集が許可される』(稲葉)

 ご無沙汰しております。
 転勤で業務多忙で今後発言できる機会がほとんどなくなりそうです・・・。

 今回はWorksheetのProtectに関することで質問です。
 新しくブックを作り、標準モジュールに以下のコードを入れてください。
 test1・・・ただの保護です。
 test2・・・test1を二回繰り返すだけです。
 test3・・・DrawingObjectsの引数を与えています
 test4・・・test3を二回繰り返しています。

 test1〜3まではシートが保護されていて、且つセルに入力しようとすると
 エラーメッセージが表示されますが、

 text4ではなぜかセルの値を書き換えることができてしまいます。
 シートが保護されているかいないかを確認してから保護すればよいのですが
 面倒だったのでこのようなつくりにしてしまったら、思わぬ誤算でした。

 この原因がわかる記述がございましたら、教えていただければと思います。

    Dim ws As Worksheet
    Private Sub wsprotect1(ws As Worksheet)
        ws.Protect
    End Sub
    Private Sub wsprotect2(ws As Worksheet)
        ws.Protect DrawingObjects:=True 'Falseでも変わらず
    End Sub
    Private Sub reset()
        For Each ws In Sheets
            ws.Unprotect
        Next ws
    End Sub
    Sub test1()
        '当然ですが、ロックされたセルは変更できない
        reset
        For Each ws In Sheets
            wsprotect1 ws
        Next ws
    End Sub
    Sub test2()
        '2回ロックしても同じこと
        reset
        For Each ws In Sheets
            wsprotect1 ws
            wsprotect1 ws
        Next ws
    End Sub
    Sub test3()
        '図の編集について名前付引数で指定した場合
        reset
        For Each ws In Sheets
            wsprotect2 ws
        Next ws
    End Sub
    Sub test4()
        '図の編集の名前付き引数で二回保護した場合・・・?
        reset
        For Each ws In Sheets
            wsprotect2 ws
            wsprotect2 ws
        Next ws
    End Sub

 追記:9:21
 この状態だと、ProtectContentsプロパティもFalse扱いになるようです。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 既にご自身で解答されているように
 理由はわかりませんが、Contents protocol も明示する必要があるようですね...

 DrawingObjects:=True, Contents:=True
(seiya) 2016/05/21(土) 10:07

 ご回答ありがとうございます
 書くなら、全部書けという話ですね。
 書き換えてほしくないところ利用者に触られてしまい、痛い目を見たので
 やはり省略すべきでないところ(目的としている箇所)は書くように心がけます。

(稲葉) 2016/05/21(土) 10:37


コメント返信:

[ 一覧(最新更新順) ]


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