Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : その他)
ブック保護の設定をしたいです。
投稿日時: 21/02/14 15:47:39
投稿者: mifuru

VBA初心者です。
VBAでExcelのブック保護を設定したいのですが、上手くいきません・・。
 
下記のコードで実行してみた結果、
【1回目】ブック保護が"設定"されました。
【2回目】ブック保護が"解除"されました。
 
 
▼使用したコード▼
ThisWorkbook.Protect Password:="1234"
 
 
なぜ2回目になると解除されてしまうのでしょうか・・。
解除するメソッドは「Unprotect」のはずですよね・・?
VBAを実行した際は、必ずブック保護が設定された状態にしたいので困っています・・。
 
コードに不足があるのでしょうか?
他に考えられる原因はありますか?
調べてみても分からなかったので、ご教示いただけますと幸いです。
よろしくお願いします。

回答
投稿日時: 21/02/14 16:07:30
投稿者: simple

そ、そんなあ、と思って試したら、確かにそうなりますね。(Excel2010)
原因は不明ですが、まあ、もともとブックの保護というのは、シートの順番等が対象なので、
シート保護に比べて、保護としての機能は低いですよね。(言い訳にはならない気がするが)
 
他の二つの引数をTrueに指定して実行すると、
二度目の保護が解除になるといったことは無いようですね。

回答
投稿日時: 21/02/14 16:44:37
投稿者: simple

手作業では、
「シート構成」「ウインドウ」の両者のチェックをはずすと、
もともとOKボタンがグレーアウトして、
保護処理自体が実行できないようになっています。
 
ですから、貴兄のコードは、実質的に何も保護していない空の保護ということなんでしょうね。
だからといって、二度目に保護命令を出したときに解除する理由は不明ですが、
実質無効なので、Excel君からすると親切にクリアーしてあげた、という気持ちなんでしょうか。
 
なお、マルチポストする理由がわかりません。
そんなに急いでいますか?
何カ所もの所に聞かないといけないような話なんですか?
個人的にはマルチポストは賛成しかねます。
一カ所で回答がついていても、別の掲示板では他の人が回答作業をしてしまいます。
自分はいいかもしれないが、無駄な作業を回答者にさせているということです。
 
加えて、こういうマルチポストをする人は、たいてい、音沙汰無しにすることが多いです(経験上)。
(少なくとも二カ所)双方ともにきちんと反応するようにしてくださいね。

回答
投稿日時: 21/02/14 17:01:01
投稿者: K.Hiwasa
投稿者のウェブサイトに移動

横から失礼します。
私もExcel2013ですが、確認しました。
「@シート構成」と「Aウインドウ」の保護ですが、AはMDIのExcel2010まで有効なようです。
また@は既定Falseとのことで、元コードは何も保護されていないようですが、
なぜかシート構成の保護がかかるようです。
simpleさんのご指摘のように、@にTrueを指定したら、2回目の解除は起こりませんでした。

投稿日時: 21/02/14 18:51:25
投稿者: mifuru

>simpeさん
lご回答ありがとうございます!
ご教示いただきましたとおり、きちんと引数を提示した結果
希望通りの動作を実現することができました!
 
またマルチポストにつきましてご不快な思いをさせてしまい大変申し訳ありません・・。
ひとつ誤解をしていただきたくないことがございます。
私は決して自分の問題が解決できればいい
という気持ちで行ったことではありません。
 
有識者の皆さんは、ある問題に直面したとき、「それぞれ一体どういった解決方法をとるのか」
といったことを知りたかったのです。
もちろん時間を割いて回答してくださった皆様にはお礼を申し上げております。
simpeさんは、回答してくださる方々のために注意喚起してくださったのですよね。
わたしも学んだことは自分のためだけに留めず、他の多くの方の悩みを解決する助力となれる
ように還元するつもりです。
 
 
>K.Hiwasaさん
ご回答ありがとうございます!
やはり引数をきちんと指定してあげることが重要のようですね!
検証していただきましてありがとうございました^^

回答
投稿日時: 21/02/14 20:48:37
投稿者: simple

有識者の皆さんは、ある問題に直面したとき、「それぞれ一体どういった解決方法をとるのか」
といったことを知りたかったのです。

それでは、どんなことがわかりましたでしょうか?
その成果を共有するため、言葉で説明してくださるとよいと思います。

回答
投稿日時: 21/02/14 21:51:22
投稿者: simple

議論の本筋ではありませんが、参考のため、マルチポストの扱い例を紹介します。
 
■禁止しているサイト例。(ExcelQ&Aサロン)

引用:
マルチポストはご遠慮ください。
 同じ内容の質問を、同時に複数の掲示板に投稿 する行為をマルチポストと言います。
 善意で回答してくれる方々や、ほかで質問した掲示板に迷惑がかかる恐れがあります。
 (先に質問した掲示板でどうしてもレスがつかなくて、ほかで質問したい場合は、
 その掲示板に解決マークをつけるか、削除するなどして、次の掲示板で質問すればこれに該当しません)

■原則認めているサイト例。(ExcelVBA質問箱)
引用:
マルチポストについて
別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。
当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで
質問してもかまわないということです。
 
しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」
ということを宣言してください。そして、仮に他のサイトで解決したのなら、
ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。
「解決したからいいや」というのではありません。
 
また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。

回答
投稿日時: 21/02/14 22:24:49
投稿者: simple

念のため、私がやったことを書いておきましょう。
1. まずは、コードを実行して確認。再現した。
2. ファイル未保存が問題かと思い、保存して開き直したが、同様だった。
3. マクロ記録をして、どんなコードになるか確認。
   password引数以外の引数が記録されたことを確認。
4.それでコード実行してみると、事象は発生しなかった。
5. Protectメソッドのヘルプを確認。再度、手作業で動作確認。
6. 回答コメント記載。
 
というアプローチです。
特に難しいことはしていません。(質問者さんにも容易にできることです。)
 
私の発言で修正を要するところは、「空の保護」とした点です。
既に指摘頂いたように、「シート構成」は有効でした。確認が不十分でした。

投稿日時: 21/02/15 19:15:32
投稿者: mifuru