エクセルで様々な計算式などが入っている表を作った時に、誤って計算式などを消されないようにシートの保護設定をしたら、マクロエラーになったことありませんか?
原因は、シートの保護を設定するとユーザーフォームのテキストボックスからの入力もできなくなってエラーになっているので、Protectメソッドを使用してシート保護・解除を自動化すれば解決しますので、使い方をご紹介します。
Protectで保護・Unprotectで解除
エクセルシートの保護をする時に、ワークシートの「校閲」から「シートの保護」で行わずにVBAコードで保護・解除ができるようになります。
この方法ならば、コマンドボタンなどに直接書き込めるので、シートの保護設定をしたからといって、入力・並べ替えなどもできるようになります。
使い方は簡単で、作業開始直前に保護解除(Unprotect)をして、作業終了直前にシートの保護(Protect)をすれば完成なので、既存のVBAコードに付け足すだけです。
Workbookで設定の場合
エクセルファイルを開いたら自動的にシートの保護をする設定方法は、「Microsoft Visual VasicのVBA Project」の中にある、「ThisWorkBook」に下記コードを記述します。
Private Sub Workbook_Open()
Worksheets(“HOME”).Activate
Range(“A1”).Select
ActiveSheet.Protect
UserForm1.Show
End Sub
- エクセルファイルが開いたら
- シート名「HOME」を前面にして作業するシートとする
- セルA1を選択する
- 開いたシートを保護する
- ユーザーフォーム1を表示する
- マクロ記録終了
5行目にActiveSheet.Protectを付け足すだけで完成で、あとは各コマンドボタンをクリックすると最初に保護解除するVBAコードを加えるだけで、マクロエラーから解放されます。
ちなみに、上記VBAコードはパスワード設定や部分許可の設定をしないシンプルな方法です。

ThisWorkBookの場所についてはこちらに記載していますのでご参考下さいませ。


各コマンドボタンの設定
先ほどブックでシートの保護を自動的に設定したので、各コマンドボタンにはすでに書いてあるプログラムの開始前にシートの解除設定をして、プログラムが終了するEnd Subの直前にシートの保護を設定するだけです。
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect
Unload UserForm1
UserForm2.Show
ActiveSheet.Protect
End Sub
- コマンドボタン1がクリックされたら
- 表示中のシートの保護を解除する
- ユーザーフォーム1を閉じる
- ユーザーフォーム2を開く
- 表示中のシートの保護を設定する



このようにするだけで、シートの保護を設定してもプログラム開始直前に解除・実行・保護となるのでコードを書き直したりする必要が無いので必ず使っていますよ。


よく見られているページ
-
エクセルの計算式の値を数字として読み取るVALUE関数
-
VBAの画面のちらつきがたった1行で解決して処理高速化する方法
-
COUNT関数を使って参加人数を自動的に数えるエクセル関数使用法
-
エクセルの時刻表示を0:00ではなく24:00にする方法
-
チェックボックスでチェック有と無しそれぞれの処理を変える方法
-
1クリックで上書き保存してエクセルファイルを閉じる方法
-
エクセル計算式が#VALUE!エラーになったセルを空欄にする方法
-
条件に一致したセルを繰り返し探してVBAで文字色を変える方法
-
コマンドボタンの色をクリックするたびに黒色と赤色を入れ替える方法
-
エクセルシートの保護したらマクロエラーになった時のVBA対処法


新着ページ