• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでのブック・シートの保護・解除について)

VBAでのブック・シートの保護・解除方法

このQ&Aのポイント
  • エクセル2010のVBAでブックとシートの保護・解除をする方法を教えてください。
  • VBAではシートの削除や作成、コピーなどを行っているため、VBA実行時のみ保護を解除したいです。
  • 対象のシートには保護を解除して入力したい項目があり、VBA終了時には再度保護をかけたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>worksheetクラスのvisibleプロパティを設定 そういうお話はありませんでしたが。典型的な二度手間ですね。 「ブックの保護」された状態のブックでは、シートの表示・非表示を操作することは当然できません。 この部分では、回答した「シートの保護」のようには、マクロ側で回避する手段はありません。 元のご相談で書かれている通り、 >VBA実行時のみ、保護を解除させるようにしたい 素直に「VBAで(対象の/問題となる)操作をする際に」そのようにしてください。 作成例: private sub Workbook_Open()  dim i as integer  for i = 1 to 3   worksheets(i).protect password:=1234, userinterfaceonly:=true  next i  thisworkbook.unprotect password:=1234  for i = 4 to 20   worksheets(i).visible = xlsheethidden  next i  thisworkbook.protect password:=1234 end sub

Hiroron12
質問者

お礼

ありがとうございました。 無事に動かすことができました。 しっかりやりたいことを考えてやらないといけないですね。 頑張りたいと思います。 ありがとうございました!

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

保護する必要が無いA6:H106については、マクロ以前の問題として、セルの書式設定の保護でロックのチェックを外しておきます。 やるべきこと: 1.保護する必要が無いセル範囲のロックを外して置く 2.ブックを開いた際にブックの保護、並びに「手動操作に対する」シートの保護をマクロで行う 以上です。 ブックAのThisWorkbook: private sub Workbook_Open()  worksheets("Sheet1").protect password:=1234, Userinterfaceonly:=true  thisworkbook.protect password:=1234 end sub 一応念のため繰り返しておきますが、「VBAの実行時」に「シートの保護をわざわざ解除」する必要はありません。

Hiroron12
質問者

お礼

ご回答ありがとうございます! ロックを外したいセルにまでロックがかかっていました。。 教えて頂いた内容を参考に書いてみたところ、無事に保護をかけることができたにですが、 「実行時エラー'1004':worksheetクラスのvisibleプロパティを設定できません」 と出てしまいました。 ↓が実際にブックAのThisbookに書いた内容になります。 シートは全部で20シートあり、保護をかけたいシート(sheet1、2、3)は左から3つ順に並んでいます。 Private Sub Workbook_Open() Dim i As Integer For i = 4 To 20 Sheets(i).Visible = xlSheetHidden Next 'ワークブックの保護 ThisWorkbook.Protect Password:="1234" 'ワークシートの保護 .Worksheets("sheet1").Protect Password:="1234", userinterfaceonly:=True .Worksheets("sheet2").Protect Password:="1234", userinterfaceonly:=True .Worksheets("sheet3").Protect Password:="1234", userinterfaceonly:=True End Sub 他にも↓のような 内容で書いて見たのですが、 モジュール内でコンパイルエラーが発生しました~のようなエラーが出てしまいます。 Dim ws as worksheet Dim wsname as string Set wsname ="sheet1" or "sheet2" or "sheet3" For each ws in thisworkbook.worksheets If ws.name = wsname then Sheets(ws).Visible = xlSheetHidden next 以下、同じ どのように書けばエラー無く処理出来るか、教えて頂けませんでしょうか。 宜しくお願い致します。

関連するQ&A