[[20210214155052]] 『VBAでブック保護の設定をしたいです』(mifuru) ページの最後に飛ぶ

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

 

『VBAでブック保護の設定をしたいです』(mifuru)

VBA初心者です。
VBAでExcelのブック保護を設定したいのですが、上手くいきません・・。

下記のコードで実行してみた結果、
【1回目】ブック保護が"設定"されました。
【2回目】ブック保護が"解除"されました。

▼コード▼
ThisWorkbook.Protect Password:="1234"

なぜ2回目になると解除されてしまうのでしょうか・・。解除するメソッドは「Unprotect」のはずですよね・・?
VBAを実行した際は、必ずブック保護が設定された状態にしたいので困っています・・。

コードに不足があるのでしょうか?
他に考えられる原因はありますか?
調べてみても分からなかったので、ご教示いただけますと幸いです。
よろしくお願いします。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


状況がよく分かりませんが、ブックを保存して
なかった、というオチてばありませんか?
(OK) 2021/02/14(日) 16:09

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

説明が分かりにくく申し訳ありません・・。
Excelの「校閲」タブにある「ブックの保護」を設定したいのです。
1回目(ブック保護されていない状態)の実行では、きちんと設定できるのですが、
2回目(ブック保護されている状態)では、ブック保護が解除されてしまいまして・・

念のためブックを保存しVBAを再実行してみましたが
やはり事象は改善されませんでした・・。
原因が分からず途方に暮れております・・。

以下すべてのコードです。

******************************************

Sub ブック保護の設定()

        'ブック保護の設定
        ThisWorkbook.Protect Password:="1111"

End Sub

******************************************

(mifuru) 2021/02/14(日) 16:57


WorkbookのProtectメソッドにはPasswordの他に、StructureとWindowsという引数があります。

ヘルプによると、「Structureの規定値はFalse、Windowsを省略するとウィンドウは保護されません。」とあります。
つまり、保護する対象を明示しない場合は、保護されないような仕様になっていようです。

ThisWorkbook.Protect Password:="1234"は
ThisWorkbook.Protect Password:="1234",Structure:=False,Windows:=Falseを省略した書き方ということになり、
シート構成とウインドウの両方とも保護されなくて、正解なのではないでしょうか。

ブックが保護されていない状態で、ThisWorkbook.Protect Password:="1234"で保護がかかるのは
手作業でブックの保護をすると「シート構成」にデフォルトでチェックが付いているので、これに倣っているのだと思います。

引数を省略せず、
ThisWorkbook.Protect Password:="1234",Structure:=True,Windows:=True
とすれば、期待通りの結果になると思います。  
(F-Rain) 2021/02/14(日) 17:17


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

ご教示いただきました通りに、きちんと引数を明示したところ
まさに希望通りの動作を実現することができました!

大変勉強になりました・・!
丁寧に解説いただきありがとうございます。
(mifuru) 2021/02/14(日) 18:07


コメント返信:

[ 一覧(最新更新順) ]


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