Wordテンプレートを文書として開く

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にはない関数なので使ってみました。

 

スタイルの削除については、こちらもご参考にどうぞ。

タイトルとURLをコピーしました