プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
ExcelVBA、シートをロック(保護)する……ついでに保護解除と、保護されているかの判定もする
結論から書くと

Worksheets("シート名").Protect

でシートをロック(保護)できます。

ついでなので書いておくと

Worksheets("シート名").Unprotect

でロック解除(保護解除)です。

対象のシートが保護されているかの判定は「ProtectContents」を使って

If Worksheets("シート名").ProtectContents Then
    MsgBox "保護されているよ"
Else
    MsgBox "保護されていないよ"
End If

で行えます。

それでは詳細を書いておきます。

保護されたシートに対して、値を埋め込みたかったのです。
集計結果(手修正不可)のシートに計算結果を入れるとか、そんな感じですね。

ところがどっこい、保護されたシートに対して

ActiveSheet.Range("A1").Value = "文字列"

とかやろうとしたところ

実行時エラー'1004':
変更しようとしているセルまたはグラフは保護されているため、読み取り専用となっています。

と怒られました。

20160412-01.png


仕方がない。
処理途中でシートの保護を一旦解除しますかな(--ゞ

ほんで、どうやるのよ(--?

というのが、今回のきっかけです。

ということで、あれやこれや調べてやって、こんな感じになりましたφ(--)

'保護解除
ActiveSheet.Unprotect

'念のため、シートが保護されていないかのチェック
If ActiveSheet.ProtectContents Then
    MsgBox "保護されているよ!"
Else
    '文字列を設定
    ActiveSheet.Range("A1").Value = "文字列"
End If

'保護
ActiveSheet.Protect

中身はコメントを見れば分かりますよね?
「ActiveSheet」の部分を「Worksheets("シート名")」に変えれば
任意のシートに対して実行できます。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:ExcelVBA  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト