文書内で使われていない段落スタイルや文字スタイルを検出して、一括削除するマクロです。
Webページなど他のソースからコピーした内容を貼り付けると、それらに含まれるスタイルもインポートされます。貼り付け後に文書内のスタイルで設定しなおしても、インポートされたスタイルは消えません。これを繰り返していくと、インポートされたスタイルにまみれて文書の本来のスタイルが埋もれてしまいます。
使用していないスタイルを検出して削除するマクロ
不要になったものの残留しているユーザー定義のスタイルをまとめて削除することを想定しています。
Public Sub 不使用スタイルを削除()
Dim aSty As Style
Dim sMsg As String
For Each aSty In ActiveDocument.Styles
' 段落スタイルと文字スタイルを対象に
Select Case aSty.Type
Case wdStyleTypeParagraph, wdStyleTypeParagraphOnly, wdStyleTypeCharacter
' 使用実績がありビルトインスタイルでないもの
If aSty.InUse = True And aSty.BuiltIn = False Then
'スタイルを検索
With ActiveDocument.Content.Find
.ClearFormatting
.Text = ""
.Style = aSty
.Execute Format:=True
'不使用(文書内で検出されない)なら削除
If .Found = False Then
sMsg = sMsg & aSty.NameLocal & vbCrLf
aSty.Delete
End If
End With
End If
End Select
Next aSty
If sMsg <> "" Then
MsgBox "次の不使用スタイルを削除しました" & vbCrLf & sMsg, _
vbInformation, "不使用スタイルの検出&削除"
End If
Set aSty = Nothing
End Sub
解説と補足
StyleObject.InUse = True
.InUse
は紛らわしいのですが、True
を返すのは「使用されたことがある」スタイルです。現在使用中とは限りません。また、読み取り専用プロパティなので .InUse = False
と値を設定することもできません。
ここでは、インポートされたスタイル(InUse
はTrue
)と、文書内のスタイルで未使用のもの(InUse
がFalse
)とを選別しています。
StyleObject.BuiltIn = False
.BuiltIn
は、「標準」や「見出し x」などの組み込みスタイルを判別するものです。組み込みスタイルは削除できないので除外しています。
スタイルの検索
検索対象のスタイルは、スタイルオブジェクトで指定します。また、スタイル検索は書式の検索なので .Execute
でFormat:=True
を指定しています。
不使用スタイルの選択削除
残したいスタイルもある場合は、スタイル名を確認しながら一つずつ削除するようにします。
If .Found = False Then
If MsgBox(aSty.NameLocal & "を削除しますか?", vbYesNo + vbQuestion) = vbYes Then
sMsg = sMsg & aSty.NameLocal & vbCrLf
aSty.Delete
End If
End If
不使用・不要なスタイルが残っている場合
組み込みスタイルは削除できないため、このマクロの対象外です。使用予定がなく表示が邪魔な場合は、非表示に設定しましょう。
テンプレートと比較してスタイルを削除するマクロはこちらで紹介しています。