テンプレートは、ドキュメントまたはドキュメントのグループの標準的な外観をすばやく定義するために使用されます。テンプレートの素晴らしい点は、1つのテンプレートを定義してドキュメントの外観を1つにし、別のテンプレートを定義してまったく異なる外観にすることができることです。もちろん、必要なのは、ドキュメントに関連付けられているテンプレートを変更することだけです。

1つまたは2つのドキュメントに関連付けられているテンプレートを変更するのは非常に簡単です。テンプレートを変更する必要のあるドキュメントでいっぱいのディレクトリがある場合はどうなりますか?これは非常にすぐに面倒になる可能性があります。これは、マクロが救助に来ることができる場所です—その古い退屈さを和らげて、ありふれたことを非常に速くするために。次のマクロChangeTemplatesは、特定のディレクトリ内のすべてのドキュメントを変更して、必要なテンプレートが使用されるようにします。

Sub ChangeTemplates()

Dim strDocPath As String     Dim strTemplateB As String     Dim strCurDoc As String     Dim docCurDoc As Document

' set document folder path and template strings     strDocPath = "C:\path to document folder\"

strTemplateB = "C:\path to template\templateB.dot"



' get first doc - only time need to provide file spec     strCurDoc = Dir(strDocPath & "*.doc")



' ready to loop (for as long as file found)

Do While strCurDoc <> ""

' open file         Set docCurDoc = Documents.Open(FileName:=strDocPath & strCurDoc)

' change the template         docCurDoc.AttachedTemplate = strTemplateB         ' save and close         docCurDoc.Close wdSaveChanges         ' get next file name         strCurDoc = Dir     Loop     MsgBox "Finished"

End Sub

マクロを使用するには、strDocPath変数とstrTemplateB変数が正しく設定されていることを確認してください。マクロは、特定のディレクトリ内のすべてのドキュメントのテンプレートの関連付けを変更します。もう少し識別力のあるものが必要な場合は、別のマクロが必要です。たとえば、マクロで各ドキュメントを調べ、TemplateAを使用するドキュメントのみを変更して、テンプレートBを使用するようにすることができます。この場合、次のマクロが非常に便利です。

Sub TemplateBatchChange()

Dim objPropertyReader     Dim strFolder As String     Dim strFileName As String     Dim objThisDoc As Word.Document     Dim strFindTemplate As String     Dim strReplaceTemplate As String     Dim strAffectedDocs As String

On Error Resume Next

'Create the PropertyReader object     Set objPropertyReader = CreateObject("DSOleFile.PropertyReader")

If Err.Number <> 0 Then         MsgBox "You must install the DSOleFile component. See " & _             "http://support.microsoft.com/kb/224351"

GoTo FinishUp     End If

'Get the template names     strFindTemplate = UCase(InputBox("Name of template to find (exclude the .dot)") & _       ".dot")



strReplaceTemplate = InputBox("Name of replacement template (exclude the .dot)") & _       ".dot"



'Make sure it's a valid template. Try to create a new document based on it.

Set objThisDoc = Word.Documents.Add(strReplaceTemplate, Visible:=False)

If Err.Number <> 0 Then         'No such template         MsgBox "There is no accessible template named " & strReplaceTemplate         GoTo FinishUp     End If     'Close the test document     objThisDoc.Close wdDoNotSaveChanges

On Error GoTo ErrorHandler     'Get the current documents path     strFolder = Word.Application.Options.DefaultFilePath(wdDocumentsPath) _       & Word.Application.PathSeparator

'Examine all Word documents in the directory

'Get the first document name     strFileName = Dir(strFolder & "*.doc")



While strFileName <> ""

'Look at the template name         If UCase(objPropertyReader.GetDocumentProperties _           (strFolder & strFileName).Template) = strFindTemplate Then

'It matches. Open the document             Set objThisDoc = Word.Documents.Open _               (FileName:=strFileName, Visible:=False)



'Change the attached template             objThisDoc.AttachedTemplate = strReplaceTemplate

'Save the change             objThisDoc.Close wdSaveChanges

'Note the document             strAffectedDocs = strAffectedDocs & strFileName & ", "

End If         'Get the next document         strFileName = Dir     Wend

'Report the results     If strAffectedDocs = "" Then         MsgBox "No documents were changed.", , "Template Batch Change"

Else         'Remove the trailing comma and space         strAffectedDocs = Left(strAffectedDocs, Len(strAffectedDocs) - 2)



MsgBox "These documents were changed: " & _           strAffectedDocs, , "Template Batch Change"

End If     GoTo FinishUp

ErrorHandler:

Set objThisDoc = Nothing     Set objPropertyReader = Nothing     Err.Raise vbError + 1001, "TemplateBatchChange", _       "TemplateBatchChange encountered an error: " & Err.Description

FinishUp:

'Release object references     Set objThisDoc = Nothing     Set objPropertyReader = Nothing End Sub

このマクロを使用するには、最初にDSOLEFILEコンポーネント(Microsoftから無料で入手可能)がシステムにインストールされていることを確認する必要があります。

このコンポーネントの詳細については、Microsoftの224351ナレッジベースの記事を参照してください。このマクロを使用すると、置き換えるテンプレート名と、置き換えるテンプレートの名前を指定できます。置換テンプレートが存在することを確認することもできます。

このマクロは、デフォルトのWordドキュメントフォルダーでドキュメントを検索します。

別の場所を直接検索する場合は、strFolder変数が使用するフォルダーのフルパスに設定されていることを確認する必要があります。

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(1437)は、Microsoft Word 97、2000、2002、および2003に適用されます。Wordのリボンインターフェイス(Word 2007)用のこのヒントのバージョンを見つけることができます。以降)ここ: