• 締切済み

エクセルVBA シートの保護について

エクセルの「シートの保護」について教えてください。 特定のシートのみ、保護したいと思っています。 そのシートの一定の範囲には、入力のみを許可したいです。 というのも、他の範囲(保護したい範囲)には、数式やvbaが設定されており、むやみやたらに「切り取り」や「行や列の削除」をされると困るからです。 そこで、 入力を許可する範囲を選択 →セルの書式設定 →保護のロックを外す →シートの保護 →「ロックされていないセル範囲を選択」を選択 しました。 この状態でマクロを実行すると、エラー1004(保護されたシートに対してこのコマンドは使用できません)とエラーが出ました。 エラー箇所は以下のとおりです。 Intersect(Worksheets("sheet1").Range("C5").CurrentRegion, Worksheets("sheet1").Rows("5:65536"), Worksheets("sheet1").Columns("C:T")).Select (質問1) ロックを外し、その後にシートの保護をする際、「全範囲を選択してから」シートの保護を行うものなのでしょうか。 それともシートの保護をすれば、自動的に、ロックを解除した範囲以外(全範囲)で保護したことになるのでしょうか。 「全範囲を選択してから」シートの保護をすると、ロックを外したセルを選択しても、アクティブセルが罫線で囲われずどこを選んでいるのか分からなくなってしまったので。 もし、あえて全範囲を選択する必要がないなら、それでいこうと思っています。 (質問2) 上記エラーを解消するには、どうしたら良いのでしょうか。 全範囲を選択できないように保護していることが原因かと思い、全範囲について「シートの保護→ロックされたセル範囲の選択」を選んでもエラー解除できませんでした。 また、Intersect.Selectの一行上に「ThisWorkbook.Unprotect」と追加しても解除できませんでした。 2つも質問して申し訳ありませんが、ご存知の方はご教授お願いします。 よろしくお願いします。

みんなの回答

回答No.2

こんにちは。 VBAでは、初歩的なことですが、Protect メソッドの UserInterfaceOnly のオプションがあります。 Protectが掛かった状態で、手動では変更できなくても、VBAマクロでは可能にする場合に利用します。 例えば、このように、ブックのオープン時に一瞬、プロテクトを解除して、プロテクトをする時に、マクロを有効にさせます。 '// Private Sub Workbook_Open()  With Worksheets("Sheet1")   .Unprotect Password:="PWS"   .Protect Password:="PWS", UserInterfaceOnly:=True  End With End Sub '// ※なお、このおまじないの有効期間は、ブックを閉じるまでの間だけのです。 したがって、私などは、つい、その働きを忘れがちになってしまうので、Workbook_Openなどで、設定します。マクロ起動時、その都度、行う必要はありません。これに付随したオプションがありますので、研究してみてください。 Q.1の解答 シートの保護をすれば、自動的に、ロックを解除した範囲以外(全範囲)は保護したことになる。 Q.2の解答 前文のコマンドで、エラー1004(実行時エラー)は、解消されるはずです。

kidibotkbg
質問者

お礼

回答ありがとうございます。 ありがとうございました。 助かりました。

  • weboner
  • ベストアンサー率45% (111/244)
回答No.1

マクロの結果で変化するセルもロックの解除が必要

kidibotkbg
質問者

お礼

回答ありがとうございます。 全ての範囲において、ロックを解除し、全ての範囲において、シート保護するということでしょうか? すると触れて欲しくない範囲まで操作されてしまうのではないでしょうか。 理解が及ばすスミマセン。

関連するQ&A