>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
保護する必要が無いA6:H106については、マクロ以前の問題として、セルの書式設定の保護でロックのチェックを外しておきます。
やるべきこと:
1.保護する必要が無いセル範囲のロックを外して置く
2.ブックを開いた際にブックの保護、並びに「手動操作に対する」シートの保護をマクロで行う
以上です。
ブックAのThisWorkbook:
private sub Workbook_Open()
worksheets("Sheet1").protect password:=1234, Userinterfaceonly:=true
thisworkbook.protect password:=1234
end sub
一応念のため繰り返しておきますが、「VBAの実行時」に「シートの保護をわざわざ解除」する必要はありません。
質問者
お礼
ご回答ありがとうございます!
ロックを外したいセルにまでロックがかかっていました。。
教えて頂いた内容を参考に書いてみたところ、無事に保護をかけることができたにですが、
「実行時エラー'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
以下、同じ
どのように書けばエラー無く処理出来るか、教えて頂けませんでしょうか。
宜しくお願い致します。
お礼
ありがとうございました。 無事に動かすことができました。 しっかりやりたいことを考えてやらないといけないですね。 頑張りたいと思います。 ありがとうございました!