[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『保護を二回かけると編集が許可される』(稲葉)
ご無沙汰しております。 転勤で業務多忙で今後発言できる機会がほとんどなくなりそうです・・・。
今回は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.