エクセルシートの保護したらマクロエラーになった時のVBA対処法

エクセル検索
HOMEUserForm印刷画面ファイル図形
日付・時刻データセル関数VBA関数

エクセルで様々な計算式などが入っている表を作った時に、誤って計算式などを消されないようにシートの保護設定をしたら、マクロエラーになったことありませんか?

原因は、シートの保護を設定するとユーザーフォームのテキストボックスからの入力もできなくなってエラーになっているので、Protectメソッドを使用してシート保護・解除を自動化すれば解決しますので、使い方をご紹介します。

Protectで保護・Unprotectで解除

エクセルシートの保護をする時に、ワークシートの「校閲」から「シートの保護」で行わずにVBAコードで保護・解除ができるようになります。

この方法ならば、コマンドボタンなどに直接書き込めるので、シートの保護設定をしたからといって、入力・並べ替えなどもできるようになります。

使い方は簡単で、作業開始直前に保護解除(Unprotect)をして、作業終了直前にシートの保護(Protect)をすれば完成なので、既存のVBAコードに付け足すだけです。

Workbookで設定の場合

エクセルファイルを開いたら自動的にシートの保護をする設定方法は、「Microsoft Visual VasicのVBA Project」の中にある、「ThisWorkBook」に下記コードを記述します。

コピペOK!

Private Sub Workbook_Open()
Worksheets(“HOME”).Activate
Range(“A1”).Select
ActiveSheet.Protect
UserForm1.Show
End Sub

解説
  1. エクセルファイルが開いたら
  2. シート名「HOME」を前面にして作業するシートとする
  3. セルA1を選択する
  4. 開いたシートを保護する
  5. ユーザーフォーム1を表示する
  6. マクロ記録終了

5行目にActiveSheet.Protectを付け足すだけで完成で、あとは各コマンドボタンをクリックすると最初に保護解除するVBAコードを加えるだけで、マクロエラーから解放されます。

ちなみに、上記VBAコードはパスワード設定や部分許可の設定をしないシンプルな方法です。

波乗りアヒル

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

各コマンドボタンの設定

先ほどブックでシートの保護を自動的に設定したので、各コマンドボタンにはすでに書いてあるプログラムの開始前にシートの解除設定をして、プログラムが終了するEnd Subの直前にシートの保護を設定するだけです。

VBAコード

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect
Unload UserForm1
UserForm2.Show
ActiveSheet.Protect
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 表示中のシートの保護を解除する
  3. ユーザーフォーム1を閉じる
  4. ユーザーフォーム2を開く
  5. 表示中のシートの保護を設定する
波乗りアヒル

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

関連記事

どこかにビューーン
ちょっとの工夫で往復無料の時代が来た!!

新着ページ

よく見られているページ

大容量無料ファイル転送サービス【ACデータ】 無料イラスト【イラストAC】

紅葉スポット

2024年5月11日からマイルと楽天ポイントとの相互交換提携開始!

交換レート0.5:1なので半分になってしまいますが、使い方次第で実質3倍の価値まで引き上げられる方法です。