Templateオブジェクトを取得して、文書として開く方法を解説します。
Templateオブジェクトは、FullName
などの情報を取得できますが、登録されているスタイルなど中身の確認・変更はできません。内容にアクセスする場合は、テンプレートを文書として開く必要があります。
テンプレートを文書として開くマクロ
Dim docTem As Document
If ActiveDocument.AttachedTemplate Is NormalTemplate Then
Exit Sub
End If
' 編集用に開く
Set docTem = ActiveDocument.AttachedTemplate.OpenAsDocument
' 確認用(読み取り専用 ・ 非表示)で開く
Set docTem = Documents.Open( _
FileName:=ActiveDocument.AttachedTemplate.FullName, _
ReadOnly:=True, _
Visible:=False)
Templateオブジェクトの取得
文書に添付されているテンプレートはDocument.AttachedTemplate
、標準テンプレートは
NormalTemplate
で取得できます。この例では、標準テンプレートが添付されている場合は処理の対象外としています。
テンプレートを文書として開く
TemplateObject.OpenAsDocument
で、編集目的でテンプレートを開きます。このメソッドには引数はありません。確認目的で読み取り専用や非表示で開く場合は、Documents.Open
で引数を指定して開きます。
どちらの場合も、開いたテンプレートはDocumentオブジェクトとなります。
テンプレートにないスタイルを削除するマクロ
上記の応用です。文書のスタイルをテンプレートと比較して、文書に独自で追加されたスタイルを削除します。
Sub スタイル削除_テンプレート基準()
Dim docAct As Document, docTem As Document
Dim styAct As Style, styTem As Style
Set docAct = ActiveDocument
Set docTem = Documents.Open( _
FileName:=docAct.AttachedTemplate.FullName, _
ReadOnly:=True, _
Visible:=False)
For Each styAct In docAct.Styles
If styAct.BuiltIn = False Then
On Error Resume Next
Set styTem = docTem.Styles(styAct.NameLocal)
On Error GoTo 0
If IsObjectValid(styTem) Then
Set styTem = Nothing
Else
styAct.Delete
End If
End If
Next styAct
docTem.Close SaveChanges:=False
End Sub
テンプレートの中身は変更しないため、Documents.Open
で読み取り専用・非表示でテンプレートを開いています。
IsObjectValid(オブジェクト変数)
は、変数に有効なオブジェクトが格納されているかを確認する関数です。この場合は、Not(styTem Is Nothing)でもよいのですが、Excelにはない関数なので使ってみました。
スタイルの削除については、こちらもご参考にどうぞ。