ユーザーフォームのコマンドボタンからワークシートを保護したいが?

Question 62.4   Previous Next
VBAを始めたばかりです。苦戦しながらあれやこれや書きながら少しずつ勉強しています。もしかしたら、ものすごく基礎的なことかもしれませんが、殆どギブアップ状態です。宜しくお願いします。
ユーザーフォーム上のコマンドボタンでシートに保護をかけても、ユーザーフォームを閉じる際に、必ず解除されてしまいます。
データを入力するときだけ、解除になるようにしたいのですが、
Answer   Copyright (C) 2003.9.16 永井善王
「ExcelVBAマクロ500連発」掲載マクロ専用の質問フォームでお送りいただきました。質問対象のマクロ番号がはっきりしませんが、読者さんでしょうか?
このホームページでは、
一般のご質問用にたくさんの窓口 を用意していますので、次回からは、そちらをご利用くださるようお願いします。

「苦戦しながらあれやこれや」ということですが、ご自分がどのようにしたのか具体的に提示され、キブアンドテイクの精神で質問されたほうが、よい回答が得られるかと思います。 (こちらのページ もご参照ください)
もし、「ユーザーフォームを閉じるだけでシートの保護が解除できるマクロ」があるならば、そうしたい人にとっては、貴重な情報になると思います。
回答に入ります。
右図のようなユーザーフォームを表示して、「Sheet1」を保護したり、解除したりするとしましょう。

1. ユーザーフォームを表示するマクロを、下記のように標準モジュールに作成する
Sub ユーザーフォームを表示する()
    Worksheets("Sheet1").Activate
    UserForm1.Show
End Sub
2. コマンドボタンがクリックされたときに動作するマクロを、下記のようにフォームモジュールに作成する
Private Sub CommandButton1_Click()
    Worksheets("Sheet1").Activate
    ActiveSheet.Protect                         'ワークシートを保護する
End Sub

Private Sub CommandButton2_Click()
    Worksheets("Sheet1").Activate
    ActiveSheet.Unprotect                       'ワークシートを非保護にする
End Sub
一般的に、ユーザーフォームからワークシートを操作する場合は、そのワークシートをアクティブにするコードを組み込んでおくと無難です。
サンプルブックのダウンロードは ここをクリック  (YNxv9239_SheetProtect.xls 29KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

 

Excel VBA Macro