• ベストアンサー

エクセル、ワークシートが保護されているかどうかを判断するVBAは?

以下のように書いてもダメでした。 どう直せばよいでしょうか? Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).Protect = False Then MsgBox Worksheets(i).Name End If Next End Sub

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

  • ベストアンサー
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

If Worksheets(i).ProtectContents Then に変えればイケます。 頑張ってくださいヽ(^。^)ノ

AQUALINE
質問者

お礼

ワークシートが保護されていないことをチェックしたかったので下記のようにしました。間違ってないですよね? ありがとうございました。 Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).ProtectContents = False Then MsgBox Worksheets(i).Name End If Next End Sub

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2です。#3が入りましたが If ws.ProtectContents Then のIf ws.ProtectContents=True Then のTrueを略しました。よくこう言う例が載ってますので使いました。 IF分のIf Thenの中に限ります。 Falseを聞くときは、書いておられるとおりでOK、略せません。

AQUALINE
質問者

お礼

なんどもありがとうございました。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.3

#1です。 はい、それで間違ってないです! 「Worksheets(i).Protect」はプロテクトをかけるメソッドで、成功するとTrueを返します(たぶん)。 「Worksheets(i).ProtectContents」はプロテクトが掛かっているかどうかの状態をTrueかFalseで返します。 蛇足ですが、「ProtectContents」自身がBoolean(TrueかFalse)なので、 If Not Worksheets(i).ProtectContents Then とも書けます。 頑張ってくださいヽ(^。^)ノ

AQUALINE
質問者

お礼

なんどもありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Sub test05() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.ProtectContents Then MsgBox ws.Name End If Next End Sub

AQUALINE
質問者

お礼

ワークシートが保護されていないことをチェックしたかったので下記のようにしました。間違ってないですよね? ありがとうございました。 Sub test05() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.ProtectContents = False Then MsgBox ws.Name End If Next End Sub