たくさんのシートが存在していて、そのうち一部のシートが保護されたExcelファイルを受け取る機会がありました。
どのシートが保護されているのかが明示されていなかったため、どれが保護されているのかを、私のほうでチェックする必要がありました。
シートの枚数がそれほどなければ特にこのようなマクロも必要なかったのかもしれませんが、結構な枚数のシートがあったため、マクロを作成しました。
その保護されたシートを調べるマクロをご紹介しておきます。
Sub 保護されているシートの一覧を作成する()
Dim sh As Object
Dim i As Long
Dim msg As String
Worksheets.Add Before:=Sheets(1)
Cells(1, 1).Value = "▼保護されているシート"
''A2セルからシート名を書き出すので変数を「2」に
i = 2
For Each sh In Sheets
If sh.ProtectContents Then
Worksheets(1).Cells(i, 1).Value = sh.Name
i = i + 1
End If
Next sh
If i = 2 Then
''保護されているシートが存在しなければ
''書き出し用に追加したシートを削除
Application.DisplayAlerts = False
Worksheets(1).Delete
Application.DisplayAlerts = True
msg = "保護されているシートは存在しません。"
Else
msg = "保護されているシート名一覧を、【" & _
Worksheets(1).Name & _
"】に作成しました。"
End If
MsgBox msg
End Sub上記のマクロを実行すると、アクティブなブックに保護されたシートが存在しているときに、先頭に追加したワークシートに、保護されているシート名が書き出されます。
メインの処理は、For Each ~ Nextループ文のところです。
ProtectContentsプロパティを調べれば、シートが保護されているかどうかがわかりますので、For Each ~ Nextループ文の中で、Sheetsコレクションオブジェクトを順番に調べていき、ProtectContentsプロパティがTrueのときに、
If sh.ProtectContents Then
Worksheets(1).Cells(i, 1).Value = sh.Name
シート名を書き出しています。
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 保護されているシート名を一覧にするマクロ