Word VBA スタイル一覧

ホームページのトップに戻る目次

Word VBA 目次

スタイル一覧を出力
 ・Selection オブジェクトを使用する
 ・Range オブジェクトを使用する
文書中のフォント名と色の一覧を出力
ワード文書の書式設定
 ・VBA の起動ボタンを設置する方法
 ・Selection、Range で選択する方法
 ・表を使用する
ワード文書の語群をExcelの辞書を使って置換
 ・参照設定
 ・文字列の検索、置換、および書式設定
 ・Word の組み込みのダイアログ ボックスを表示する
 ・コレクションからオブジェクトを取得する
テキスト・ファイルの文字コード変換

索引
 

スタイル一覧を出力

このマクロの文書と同一フォルダの、全てのワード文書に含まれるスタイル一覧を出力します。
コードは、下記を参考にしています。
Word 文書で使用できる全スタイルの一覧を取得
http://gallery.technet.microsoft.com/office/baabcb15-c20e-432c-a728-b5aa39babdff

このマクロをダウンロードできます。→ListUpAllDocument-stylesVBA01.doc

注:Excel シートに書き出す Excel VBA バージョンも作ってみました。ご参考まで。


Option Explicit

Sub 対象Word文書の全てのスタイルを取得()

   Dim 現在のパス As String
   Dim カウンタ文書 As Integer
   Dim カウンタstyle As Integer
   Dim ファイルシステムオブジェクト As Object          ' FileSystemObject
   Dim フォルダ As Object
   Dim ファイル As Object
   Dim 開始日時 As Variant
   Dim 終了日時 As Variant
   Dim 処理文書 As Document
   Dim ファイル名 As String
   Dim スタイル As Object
   Dim 文字列 As String
   Dim フッタ As HeaderFooter
    
   開始日時 = Now                ' 開始時刻を変数に格納します。

   現在のパス = ActiveDocument.Path
   ActiveDocument.Content.Delete '既表示内容を消去する
   
   Set ファイルシステムオブジェクト = CreateObject("Scripting.FileSystemObject")
      
   Set フォルダ = ファイルシステムオブジェクト.GetFolder(現在のパス)

   '★このマクロのWord 文書の存在するフォルダの全てのファイルを対象
   For Each ファイル In フォルダ.Files
      
      ファイル名 = ファイル.Path

      If Mid(ファイル名, InStrRev(ファイル名, ".") + 1, 3) = "doc" Then
      
         If Dir(ファイル名) <> ThisDocument.Name _
         And Len(Dir(ファイル名)) <> 0 Then '自分自身と、ロック用の一時ファイル~$は対象外
'Stop
            カウンタ文書 = カウンタ文書 + 1
            文字列 = ""
            
            Set 処理文書 = Documents.Open(FileName:=ファイル名) '文書ファイルを開く
            
            文字列 = CStr(カウンタ文書) & String(10, "★") & vbNewLine
            文字列 = 文字列 & "ファイル名: " & ファイル名 & vbNewLine
            
            カウンタstyle = 0
            For Each スタイル In 処理文書.Styles
               カウンタstyle = カウンタstyle + 1

               文字列 = 文字列 & CStr(カウンタ文書) & " ☆ " & CStr(カウンタstyle) _
                  & " ★ Style Name: " & スタイル.NameLocal & vbNewLine
               文字列 = 文字列 & "Font Name: " & スタイル.Font.Name & vbNewLine
               文字列 = 文字列 & "Font Size: " & スタイル.Font.Size & vbTab
               文字列 = 文字列 & "Bold: " & スタイル.Font.Bold & vbTab
               文字列 = 文字列 & "Italic: " & スタイル.Font.Italic & vbNewLine
            Next
            
            処理文書.Close savechanges:=False           '保存せずに文書ファイルを閉じる
             
            Set 処理文書 = Nothing
             ' 結果表示
             
            ThisDocument.Activate
            Selection.TypeText Text:=文字列
            Selection.Collapse Direction:=wdCollapseEnd
            Selection.InsertBreak
             
         End If
     End If

   Next '★ファイル

   Set フォルダ = Nothing
   Set ファイルシステムオブジェクト = Nothing
   
   
   Selection.WholeStory
   Selection.Font.Name = "MS 明朝"
   Selection.Font.Size = 10
   
   
   Selection.MoveDown Unit:=wdLine, Count:=4
   With Selection.ParagraphFormat
      .LeftIndent = MillimetersToPoints(0)
      .RightIndent = MillimetersToPoints(0)
      .SpaceBefore = 0
      .SpaceBeforeAuto = False
      .SpaceAfter = 0
      .SpaceAfterAuto = False
'      .LineSpacingRule = wdLineSpaceSingle '行間一行
      .LineSpacingRule = wdLineSpaceAtLeast '行間最小
      .LineSpacing = 12                     '行間12
      .Alignment = wdAlignParagraphJustify
      .WidowControl = False
      .KeepWithNext = False
      .KeepTogether = False
      .PageBreakBefore = False
      .NoLineNumber = False
      .Hyphenation = True
      .FirstLineIndent = MillimetersToPoints(0)
      .OutlineLevel = wdOutlineLevelBodyText
      .CharacterUnitLeftIndent = 0
      .CharacterUnitRightIndent = 0
      .CharacterUnitFirstLineIndent = 0
      .LineUnitBefore = 0
      .LineUnitAfter = 0
      .MirrorIndents = False
      .TextboxTightWrap = wdTightNone
      .AutoAdjustRightIndent = True
      .DisableLineHeightGrid = True
      .FarEastLineBreakControl = True
      .WordWrap = True
      .HangingPunctuation = True
      .HalfWidthPunctuationOnTopOfLine = False
      .AddSpaceBetweenFarEastAndAlpha = True
      .AddSpaceBetweenFarEastAndDigit = True
      .BaseLineAlignment = wdBaselineAlignAuto
   End With
   
   
   With Selection.PageSetup
      .LayoutMode = wdLayoutModeDefault
   End With
   
   'フッタにページ番号挿入
   Set フッタ = ActiveDocument.Sections(1).Footers(1)
   フッタ.PageNumbers.Add _
        PageNumberAlignment:=wdAlignPageNumberCenter, _
        FirstPage:=True
   Set フッタ = Nothing

   終了日時 = Now
   MsgBox "処理を終了しました。" & vbNewLine & "処理時間は、" _
   & Format(終了日時 - 開始日時, "hh時間nn分ss秒") & " でした。"
End Sub

解説:
Documents コレクション オブジェクト は、Word で現在開かれているすべての Document オブジェクトのコレクションです。

 Documents プロパティを使用して Documents コレクションを取得します。

次の使用例は、開かれた文書の名前を表示します。
For Each aDoc In Documents
    aName = aName & aDoc.Name & vbCr
Next aDoc
MsgBox aName

 Add メソッドを使用して、新しく空の文書を作成し、Documents コレクションに追加します。

次の使用例は、標準テンプレートを使用して新しい文書を作成します。
Documents.Add

 Open メソッドを使用してファイルを開きます。

次の使用例は、"Sales.doc" という名前の文書を開きます。
Documents.Open FileName:="C:\My Documents\Sales.doc"

 Documents(Index) を使用して Document オブジェクトを取得します (Index には文書名またはインデックス番号を指定)。

次の使用例は、変更を保存せずに、"Report.doc" という名前の文書を閉じます。
Documents("Report.doc").Close SaveChanges:=wdDoNotSaveChanges

 インデックス番号は、Documents コレクションでの文書の位置を表します。

次の使用例は、Documents コレクション内で 1 番目の文書を選択します。
Documents(1).Activate

 次の使用例は、Documents コレクションの文書を列挙して、"Report.doc" という名前の文書が開かれているかどうかを調べます。
この文書が Documents コレクションに含まれている場合はこの文書に切り替わり、含まれていない場合は開かれます。
For Each doc In Documents
    If doc.Name = "Report.doc" Then found = True
Next doc
If found <> True Then 
    Documents.Open FileName:="C:\Documents\Report.doc"
Else
    Documents("Report.doc").Activate
End If


Application.Documents プロパティ は、開かれているすべての文書を表す Documents コレクションを取得します。値の取得のみ可能です。
 構文
 .Documents
    Application オブジェクトを表す変数を指定します。

 コレクションのメンバを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

 次の使用例は、標準テンプレートに基づいて新しい文書を作成し、[名前を付けて保存] ダイアログ ボックスを表示します。
Documents.Add.Save

 次の使用例は、開かれている文書の中で、変更が保存されていない文書を保存します。
Dim docLoop As Document

For Each docLoop In Documents
   If docLoop.Saved = False Then docLoop.Save
Next docLoop

 次の使用例は、左右の余白を 12.5mm に設定した後、開かれている各文書を印刷します。
Dim docLoop As Document

For Each docLoop In Documents
    With docLoop
        .PageSetup.LeftMargin = InchesToPoints(0.5)
        .PageSetup.RightMargin = InchesToPoints(0.5)
        .PrintOut
    End With
Next docLoop

 次の使用例は、MyDoc.doc を読み取り専用で開きます。
Documents.Open FileName:="C:\Files\Doc.doc", ReadOnly:=True


Document オブジェクト は、文書を表します。
Document オブジェクトは Documents コレクションのメンバです。
Documents コレクションには、Word で現在開かれているすべての Document オブジェクトが含まれます。

 Documents(Index) を使用して Document オブジェクトを取得します 。
(Index には、文書名またはインデックス番号を指定します。)

次の使用例は、変更を保存せずに、"Report.doc" という名前の文書を閉じます。
Documents("Report.doc").Close SaveChanges:=wdDoNotSaveChanges

 インデックス番号は、Documents コレクションでの文書の位置を表します。

次の使用例は、Documents コレクション内で 1 番目の文書を選択します。
Documents(1).Activate

 ActiveDocument プロパティを使用して、フォーカスのある文書を参照できます。

次の使用例は、Activate メソッドを使用して "文書 1" (Document1) という名前の文書をアクティブにし、用紙を横向きに設定して、文書を印刷します。
Documents("Document1").Activate
ActiveDocument.PageSetup.Orientation = wdOrientLandscape
ActiveDocument.PrintOut


Global.ActiveDocument プロパティ は、作業中の文書を表す Document オブジェクトを取得します。値の取得のみ可能です。
 構文
 .ActiveDocument
    Global オブジェクトを表す変数です。
 備考
 開かれた文書がない場合にこのプロパティを使用すると、エラーが発生します。

 次の使用例は、作業中の文書の名前を表示します。また、開かれた文書がない場合は、メッセージを表示します。
If Application.Documents.Count >= 1 Then
    MsgBox ActiveDocument.Name
Else
    MsgBox "No documents are open"
End If

 次の使用例は、選択範囲を解除して選択開始位置にカーソルを移動し、カーソル位置の次の 5 文字を取得します。
Dim rngTemp As Range

Selection.Collapse Direction:=wdCollapseStart
Set rngTemp = ActiveDocument.Range(Start:=Selection.Start, _
    End:=Selection.Start + 5)

 次の使用例は、作業中の文書の先頭に文字列を挿入し、文書を印刷します。
Dim rngTemp As Range

Set rngTemp = ActiveDocument.Range(Start:=0, End:=0)
With rngTemp
    .InsertBefore "Company Report"
    .Font.Name = "Arial"
    .Font.Size = 24
    .InsertParagraphAfter
End With

ActiveDocument.PrintOut


Selection.Delete メソッド は、指定された数だけ文字または単語を削除します。

構文
.Delete(Unit, Count)

   必ず指定します。Selection オブジェクトを表す変数を指定します。
パラメータ
名前必須/オプションデータ型説明
Unitオプションバリアント型 (Variant)選択が解除された選択範囲を削除するときの単位を指定します。WdUnits クラスの定数を使用できます。
Countオプションバリアント型 (Variant)削除する単位数を指定します。
選択範囲の後の単位を削除するには、その選択範囲の選択を解除し、正の値を指定します。
選択範囲の前の単位を削除するには、その選択範囲の選択を解除し、負の値を指定します。
戻り値
長整数型 (Long)

このメソッドは、文字または単語を削除した場合はその削除数を示す長整数型 (Long) の値を、削除が失敗した場合は 0 (ゼロ) を返します。

次の使用例は、現在の文書の内容を選択して削除します。
Sub DeleteSelection()
    Dim intResponse As Integer
    
    intResponse = MsgBox("Are you sure you want to " & _
        "delete the contents of the document?", vbYesNo)
    
    If intResponse = vbYes Then
        ActiveDocument.Content.Select
        Selection.Delete
    End If
End Sub


Selection オブジェクト は、ウィンドウ内またはウィンドウ枠内で現在選択されている範囲を表します。
選択範囲は、文書内での選択領域 (強調表示された領域) を表す場合と、文書内で何も選択されていない際のカーソル位置を表す場合のいずれかです。
文書ウィンドウ枠あたり 1 つの Selection オブジェクトしか指定できず、アプリケーション全体でアクティブにできる Selection オブジェクトは 1 つだけです。
備考
Selection プロパティを使用して、Selection オブジェクトを取得します。
Selection プロパティにオブジェクト修飾子が使用されていない場合は、現在の文書ウィンドウにおける現在のウィンドウ枠から選択範囲が返されます。

次の使用例は、現在の文書から現在の選択範囲をコピーします。
Selection.Copy

次の使用例は、Documents コレクション内の 3 番目の文書から選択範囲を削除します。
文書が現在使用中でなくても、現在の選択範囲にアクセスできます。
Documents(3).ActiveWindow.Selection.Cut

次の使用例は、現在の文書の 1 番目のウィンドウ枠から選択範囲をコピーし、2 番目のウィンドウ枠に貼り付けます。
ActiveDocument.ActiveWindow.Panes(1).Selection.Copy
ActiveDocument.ActiveWindow.Panes(2).Selection.Paste

Text プロパティは Selection オブジェクトの既定のプロパティです。
このプロパティを使用して、現在の選択範囲に文字列を設定したり、現在の選択範囲内の文字列を取得します。

次の使用例は、現在の選択範囲内の文字列を変数 strTemp に代入し、最後の文字が段落記号の場合は、その文字を削除します。
Dim strTemp as String

strTemp = Selection.Text
If Right(strTemp, 1) = vbCr Then _
    strTemp = Left(strTemp, Len(strTemp) - 1)

Selection オブジェクトには、さまざまなメソッドやプロパティが用意されており、これらを使用して、現在の選択範囲を解除、展開、または変更できます。

次の使用例は、カーソル位置を文書の最後に移動し、最後の 3 行を選択します。
Selection.EndOf Unit:=wdStory, Extend:=wdMove
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveUp Unit:=wdLine, Count:=2, Extend:=wdExtend

Selection オブジェクトには、さまざまなメソッドやプロパティが用意されており、これらを使用して、文書内で選択した文字列を編集できます。

次の使用例は、文書内で先頭の文を選択し、その文を新しい段落で置き換えます。
Options.ReplaceSelection = True
ActiveDocument.Sentences(1).Select
Selection.TypeText "Material below is confidential."
Selection.TypeParagraph

次の使用例は、Documents コレクション内の 1 番目の文書で最後の段落を削除し、2 番目の文書の先頭に貼り付けます。
With Documents(1)
    .Paragraphs.Last.Range.Select
    .ActiveWindow.Selection.Cut
End With

With Documents(2).ActiveWindow.Selection
    .StartOf Unit:=wdStory, Extend:=wdMove
    .Paste
End With

Selection オブジェクトには、さまざまなメソッドやプロパティが用意されており、これらを使用して、現在の選択範囲の書式を変更できます。

次の使用例は、現在の選択範囲のフォントを Times New Roman から Tahoma に変更します。
If Selection.Font.Name = "Times New Roman" Then _
    Selection.Font.Name = "Tahoma"
FlagsInformation、および Type などのプロパティを使用して、現在の選択範囲に関する情報を取得します。

次の使用例は、作業中の文書内に選択範囲が存在しているかどうかを調べます。
選択範囲が存在していない場合、プロシージャの以降の処理は行われません。
If Selection.Type = wdSelectionIP Then
    MsgBox Prompt:="You have not selected any text! Exiting procedure..."
    Exit Sub
End If

選択範囲が解除されてカーソル位置になっている場合でも、必ずしも空であるとは限りません。
たとえば、Text プロパティはカーソル位置の右側に文字を返します。また、この文字は、Selection オブジェクトの Characters コレクションに追加されています。
ただし、選択範囲が解除されている場合に、Cut メソッドや Copy メソッドなどの呼び出しを行うと、エラーが発生します。

ユーザーは、(たとえば、Alt キーとマウスを一緒に使用して) 文書内で不連続な範囲の文字列を選択できます。このような選択の動作は予期できないことがあるため、選択範囲に対して処理を行う前にその選択範囲の Type プロパティを調べるための手順をコードに含めることを推奨します (Selection.Type = wdSelectionBlock)。
同様に、選択範囲に表のセルが含まれている場合も、予期しない動作を招くことがあります。
Information プロパティを使用すると、選択範囲が表の中にあるかどうかを調べることができます。
Selection.Information(wdWithinTable) = True

次の使用例は、選択範囲が正常であるかどうか (つまり、表の行や列が選択されていない、文字列が垂直方向に選択されていない、など) を調べます。
これを使用すると、現在の選択範囲に対して処理を行う前に、その選択範囲を調べることができます。
If Selection.Type <> wdSelectionNormal Then
    MsgBox Prompt:="選択範囲が正しくありません。プロシージャを終了します。"
    Exit Sub
End If

WdSelectionType 列挙 は、選択の種類を指定します。
名前説明
wdNoSelection0選択なし
wdSelectionBlock6ブロック
wdSelectionColumn4
wdSelectionFrame3レイアウト枠
wdSelectionInlineShape7インライン図形
wdSelectionIP1インライン段落
wdSelectionNormal2標準またはユーザー定義
wdSelectionRow5
wdSelectionShape8図形

Range オブジェクトは、Selection オブジェクトと同じメソッドとプロパティを共有しているため、現在の選択範囲を物理的に変更する理由がない場合に文書を操作するときは、Range オブジェクトを使用することを推奨します。
Selection オブジェクトおよび Range オブジェクトの詳細については、「Selection オブジェクトを使用する」および「Range オブジェクトを使用する」を参照してください。


Global.Selection プロパティ は、選択範囲またはカーソル位置を表す Selection オブジェクトを取得します。値の取得のみ可能です。

 構文
 .Selection
    Global オブジェクトを表す変数を指定します。

 次の使用例は、選択した文字列を表示します。
If Selection.Type = wdSelectionNormal Then MsgBox Selection.Text

 次の使用例は、選択部分に Arial フォントと太字を設定します。
With Selection.Font
    .Bold = True
    .Italic = False
    .Name = "Arial"
End With

 カーソルが表の中にない場合、カーソルは次の表に移動します。
If Selection.Information(wdWithInTable) = False Then 
    Selection.GoToNext What:=wdGoToTable
End If


Range オブジェクト は、文書の隣接する領域を表します。
Range オブジェクトは開始文字位置および終了文字位置で定義されます。
備考
 文書でブックマークを使用する場合と同様に、Visual Basic のプロシージャでは文書の特定の部分を指定するときに Range オブジェクトを使用します。
ただし、ブックマークとは異なり、Range オブジェクトを定義するプロシージャの実行中のみ、オブジェクトが存在します。Range オブジェクトは選択範囲から独立しています。つまり、選択範囲を変更しなくてもオブジェクトを定義し操作できます。また、文書では複数の範囲を定義できますが、各ウィンドウ枠には 1 つの選択範囲しか存在できません。
 Range メソッドを使用して、特定の開始文字位置および終了文字位置で定義される Range オブジェクトを取得します。

次の使用例は、作業中の文書の最初の 10 文字を参照する Range オブジェクトを取得します。
Set myRange = ActiveDocument.Range(Start:=0, End:=10)

 Range プロパティを使用して、別のオブジェクトの開始位置と終了位置で定義される Range オブジェクトを取得します。Range プロパティは多くのオブジェクト (たとえば、ParagraphBookmarkCell など) で使用できます。

次の使用例は、作業中の文書の最初の段落を参照する Range オブジェクトを取得します。
Set aRange = ActiveDocument.Paragraphs(1).Range

 次の使用例は、作業中の文書の 2 番目の段落から 4 番目の段落までを参照する Range オブジェクトを取得します。
Set aRange = ActiveDocument.Range( _
    Start:=ActiveDocument.Paragraphs(2).Range.Start, _
    End:=ActiveDocument.Paragraphs(4).Range.End)

 Range オブジェクトの使用法については、「Range オブジェクトを使用する」を参照してください。

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


Selection オブジェクトを使用する

通常、Microsoft Office Word で文書を操作する場合は、最初に文字列を選択してから、書式の設定や、文字列の入力を行います。
Microsoft Visual Basic の場合、文字列を変更する前に文字列を選択する必要はありません。その代わりに、文書の特定の範囲を参照する Range オブジェクトを作成します。
Range オブジェクトの定義については、「Range オブジェクトを使用する」を参照してください。
ただし、コードで選択範囲に応答したり、これを変更する場合は、Selection オブジェクトを使用します。
文字列が選択されていない場合は、特定のオブジェクトに関連付けられた Select メソッドを使用して、Selection オブジェクトを作成します。

たとえば、次のコードは、作業中の文書の先頭の単語を選択します。
Sub SelectFirstWord()
    ActiveDocument.Words(1).Select
End Sub

詳細については、「文書内の文字列を選択する」を参照してください。
文字列が既に選択されている場合は、Selection プロパティを使用して文書内の現在の選択範囲を表す Selection オブジェクトを取得します。
Selection オブジェクトは文書ごとに 1 つだけ存在し、常に現在の選択範囲にアクセスします。

次の使用例は、現在の選択範囲の段落の書式を変更します。
Sub FormatSelection()
    Selection.Paragraphs.LeftIndent = InchesToPoints(0.5)
End Sub

次の使用例は、現在の選択範囲の後に "はじめまして" という単語を挿入します。
Sub InsertTextAfterSelection()
    Selection.InsertAfter Text:="はじめまして "
End Sub

次の使用例は、選択範囲の文字列に太字を設定します。
Sub BoldSelectedText()
    Selection.Font.Bold = True
End Sub

マクロ記録機能では、通常、Selection オブジェクトを使用するマクロが作成されます。

次の使用例は、マクロ記録機能で作成されたものです。このマクロは、作業中の文書の先頭の 2 つの単語を選択し、太字の書式を設定します。
Sub Macro()
    Selection.HomeKey Unit:=wdStory
    Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend
    Selection.Font.Bold = wdToggle
End Sub

次の使用例は、文字列を選択したり、Selection オブジェクトを使用したりせずに同じ処理を実行します。
Sub WorkingWithRanges()
    ActiveDocument.Range(Start:=0, _
        End:=ActiveDocument.Words(2).End).Bold = True
End Sub


文書内の文字列を選択する
 文書内の項目を選択するには、Select メソッドを使用します。
Select メソッドは、BookmarkFieldRangeTable など、さまざまなオブジェクトから使用できます。

次の使用例は、作業中の文書内の最初の表を選択します。
Sub SelectTable()
    ActiveDocument.Tables(1).Select
End Sub

 次の使用例は、作業中の文書内の最初のフィールドを選択します。
Sub SelectField()
    ActiveDocument.Fields(1).Select
End Sub

 次の使用例は、作業中の文書の先頭から 4 つの段落を選択します。
ここでは、Range メソッドを使用して、この 4 つの段落を参照する Range オブジェクトを作成します。
次に、Range オブジェクトに Select メソッドを適用します。
Sub SelectRange()
    Dim rngParagraphs As Range
    Set rngParagraphs = ActiveDocument.Range( _
        Start:=ActiveDocument.Paragraphs(1).Range.Start, _
        End:=ActiveDocument.Paragraphs(4).Range.End)
    rngParagraphs.Select
End Sub

 詳細については、「Selection オブジェクトを使用する」を参照してください。

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


Range オブジェクトを使用する

通常、Microsoft Visual Basic を使用する場合は、文書内の領域を指定してから、その領域に対して文字列の挿入や書式の設定などの操作を実行します。
たとえば、文書内の特定の領域で、単語または句を検索するマクロを作成する場合、文書内の特定の領域は、Range オブジェクトで表すことができます。
Range オブジェクトが指定されると、Range オブジェクトのメソッドおよびプロパティを適用して、指定範囲の内容を変更できます。

Range オブジェクトは、文書内の連続する領域を参照します。
Range オブジェクトは、指定範囲の開始位置と終了位置で定義されます。
文書のブックマークと同じように、Visual Basic プロシージャの中で Range オブジェクトを使用し、文書の特定の範囲を指定します。
Range オブジェクトで指定する範囲は、カーソル位置でも、文書全体でもかまいません。
ただし、ブックマークとは異なり、Range オブジェクトは、これを定義するプロシージャが実行されている間のみ有効です。

StartEnd、および StoryType プロパティを使用すると、Range オブジェクトを一意に識別できます。
Start および End プロパティでは、Range オブジェクトの指定範囲の開始と終了の文字の位置をそれぞれ設定したり、取得することができます。
文書の先頭の文字の位置は 0 (ゼロ) で、その次が 1、以降は順に続きます。
ストーリーは 11 種類あり、StoryType プロパティの定数 WdStoryType でそれぞれ表されます。

メモ
Range オブジェクトは、選択範囲とは別のものです。つまり、現在の選択範囲を変更することなく、特定の指定範囲を定義および変更できます。
文書のウィンドウ枠の選択範囲は 1 つだけですが、文書内には複数の指定範囲を定義できます。

Range メソッドの使い方
メイン ストーリーにあり、開始位置と終了位置が指定された Range オブジェクトを作成するには、Document オブジェクトの Range メソッドを使用します。

次の使用例は、先頭の文字から 10 番目の文字までの Range オブジェクトを作成します。
Sub SetNewRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
End Sub

Range オブジェクトにプロパティまたはメソッドを適用すると、Range オブジェクトが作成されることがわかります。

次の使用例は、現在の文書の先頭の 10 文字に太字を設定します。
Sub SetBoldRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
    rngDoc.Bold = True
End Sub

Range オブジェクトを何度も参照する必要がある場合は、Set ステートメントを使用して Range オブジェクトを変数に格納します。
ただし、Range オブジェクトを参照するのが一度だけの場合は、オブジェクトを変数に格納する必要はありません。コードで一度だけ指定範囲を識別し、Bold プロパティを変更しても結果は同じです。
Sub BoldRange()
    ActiveDocument.Range(Start:=0, End:=10).Bold = True
End Sub

指定範囲には、ブックマークと同じように、複数の文字を指定することも、文書内の特定の位置を指定することもできます。

次の使用例では、Range オブジェクトの指定範囲の開始位置と終了位置に、同じ値が指定されています。つまり、指定範囲には文字列が含まれません。

次の使用例は、作業中の文書の先頭に文字列を挿入します。
Sub InsertTextBeforeRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=0)
    rngDoc.InsertBefore "Hello "
End Sub
上の使用例に示したように、指定範囲の開始位置と終了位置は文字の位置の番号で定義できます。

SelectionBookmark、または Range などのオブジェクトに対して Start および End プロパティを使用することもできます。

次の使用例は、2 番目の段落の先頭から 3 番目の段落の末尾までの Range オブジェクトを作成します。
Sub NewRange()
    Dim doc As Document
    Dim rngDoc As Range

    Set doc = ActiveDocument
    Set rngDoc = doc.Range(Start:=doc.Paragraphs(2).Range.Start, _
        End:=doc.Paragraphs(3).Range.End)
End Sub

Range プロパティの使い方
Range プロパティは、ParagraphBookmarkCell などさまざまなオブジェクトで有効で、Range オブジェクトを取得するために使用されます。

次の使用例は、現在の文書内の最初の段落を参照する Range オブジェクトを取得します。
Sub SetParagraphRange()
    Dim rngParagraph As Range
    Set rngParagraph = ActiveDocument.Paragraphs(1).Range
End Sub

Range オブジェクトを取得したら、そのプロパティまたはメソッドを使用して、Range オブジェクトを変更できます。

次の使用例は、現在の文書の 2 番目の段落を選択し、選択範囲を中央揃えにします。
Sub FormatRange()
    ActiveDocument.Paragraphs(2).Range.Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
End Sub

同じ Range オブジェクトに複数のプロパティまたはメソッドを適用する必要がある場合は、With…End With 構造を使用できます。

次の使用例は、現在の文書内の最初の段落の文字列に書式を設定します。
Sub FormatFirstParagraph()
    Dim rngParagraph As Range
    Set rngParagraph = ActiveDocument.Paragraphs(1).Range
    With rngParagraph
        .Bold = True
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        With .Font
            .Name = "Stencil"
            .Size = 15
        End With
    End With
End Sub

Range オブジェクトを再定義する
既存の Range オブジェクトを再定義するには SetRange メソッドを使用します。

次の使用例は、指定範囲を現在の選択範囲として定義します。次に、SetRange メソッドを使用して、現在の選択範囲に続く 10 文字も参照するように指定範囲を再定義します。
Sub ExpandRange()
    Dim rngParagraph As Range
    Set rngParagraph = Selection.Range
    rngParagraph.SetRange Start:=rngParagraph.Start, _
        End:=rngParagraph.End + 10
End Sub

メモ
マクロのデバッグを行うときは、Select メソッドを使用して、Range オブジェクトが文字列の現在の範囲を参照していることを確認できます。
たとえば、次の使用例は、現在の文書内の 2 番目および 3 番目の段落を参照する Range オブジェクトを選択し、その選択範囲のフォントを設定します。
Sub SelectRange()
    Dim rngParagraph As Range

    Set rngParagraph = ActiveDocument.Paragraphs(2).Range

    rngParagraph.SetRange Start:=rngParagraph.Start, _
        End:=ActiveDocument.Paragraphs(3).Range.End
    rngParagraph.Select

    Selection.Font.Italic = True
End Sub


Selection.InsertBreak メソッド は、改ページ、段区切り、またはセクション区切りを挿入します。
 構文
 .InsertBreak(Type)
    必ず指定します。Selection オブジェクトを表す変数を指定します。

 パラメータ
名前必須/オプションデータ型説明
Type必須WdBreakType挿入される文書区切りの種類を指定します。既定値は wdPageBreak です。
WdBreakType クラスの定数の中には、選択またはインストールされている言語の設定 (たとえば、日本語) によっては使用できないものがあります。

WdBreakType 列挙 は、改ページの種類を指定します。
名前説明
wdColumnBreak8挿入位置に段区切りを挿入します。
wdLineBreak6改行します。
wdLineBreakClearLeft9改行します。
wdLineBreakClearRight10改行します。
wdPageBreak7挿入位置で改ページします。
wdSectionBreakContinuous3改ページなしで新しいセクションを開始します。
wdSectionBreakEvenPage4セクション区切りを挿入し、次の偶数ページから次のセクションを開始します。
セクション区切りを偶数ページに挿入した場合、次の奇数ページは空白になります。
wdSectionBreakNextPage2次のページ上にセクション区切りを挿入します。
wdSectionBreakOddPage5セクション区切りを挿入し、次の奇数ページから次のセクションを開始します。
セクション区切りを奇数ページに挿入した場合、次の偶数ページは空白になります。
wdTextWrappingBreak11現在の行を終了し、画像、表、またはその他の項目の下に続きの文字列を配置します。
続きの文字列の開始位置は、左端または右端に揃えられた表を含まない、次の空白行です。
 備考
 この列挙は Range または Selection オブジェクトの InsertBreak メソッドと組み合わせて使用します。


 ページ区切りまたは段区切りを挿入すると、選択部分がその区切りに置き換えられます。選択部分を置き換えない場合は、InsertBreak メソッドを使用する前に Collapse メソッドを使用して選択を解除します。
メモ
セクション区切りは、選択範囲の直前に挿入されます。

 次の使用例は、選択部分の直前に現在の位置から開始するセクション区切りを挿入します。
Selection.InsertBreak Type:=wdSectionBreakContinuous


Selection.Collapse メソッド は、選択を解除します。
つまり、既定値の wdCollapseStart の場合は、選択を文書の先頭方向に解除して選択範囲の前にカーソルを移動します。
選択が解除されると、選択開始位置と選択終了位置は等しくなります。

 構文
 .Collapse(Direction)
    必ず指定します。Selection オブジェクトを表す変数です。
 パラメータ
名前必須/オプションデータ型説明
Directionオプションバリアント型 (Variant)選択を解除する方向を指定します。
使用できる定数は、WdCollapseDirection クラスの wdCollapseEnd または wdCollapseStart です。
既定値は wdCollapseStart です。

 次の使用例は、選択を解除し、選択開始位置にカーソルを移動します。
つまり、選択を文書の先頭方向に解除して選択範囲の前にカーソルを移動します。
Selection.Collapse Direction:=wdCollapseStart


Document.Content プロパティ は、本文のストーリー(文書内でほかの領域とは区別できるテキストを含む文書の領域。たとえば、文書に本文、脚注、およびヘッダーが含まれている場合は、本文ストーリー、脚注ストーリー、およびヘッダー ストーリーが含まれています。)を示す Range オブジェクトを取得します。値の取得のみ可能です。

 構文
 .Content
    Document オブジェクトを表す変数を指定します。
 備考
 次の 2 つのステートメントでは、同じ結果が得られます。
Set mainStory = ActiveDocument.Content
Set mainStory = ActiveDocument.StoryRanges(wdMainTextStory)

 次の使用例は、作業中の文書で、文字列のフォントを Arial、フォント サイズを 10 ポイントに変更します。
Set myRange = ActiveDocument.Content
With myRange.Font
    .Name = "Arial"
    .Size = 10
End With

 次の使用例は、"Changes.doc" という名前の文書の最後に文字列を挿入します。
For Each...Next ステートメントを使用して、文書が開いているかどうかを判断しています。
For Each aDocument In Documents
    If InStr(LCase$(aDocument.Name), "changes.doc") Then
        Set myRange = Documents("Changes.doc").Content
        myRange.InsertAfter "the end."
    End If
Next aDocument


LayoutMode プロパティ は、現在の文書のレイアウト モードを設定します。値の取得および設定が可能です。
使用できる定数は、次に示す WdLayoutMode クラスの定数のいずれかです。
wdLayoutModeDefault 文字列の配置にグリッドは使用されません。
wdLayoutModeGenko 文字列はグリッドに配置されます。
ユーザーは行数および 1 行の文字数を指定します。
ユーザーが入力したときに、文字は自動的にグリッド線に配置されます。
wdLayoutModeGrid 文字列はグリッドに配置されます。
ユーザーは行数および 1 行の文字数を指定します。
ユーザーが入力したときに、文字はグリッド線に自動的には配置されません。
wdLayoutModeLineGrid 文字列はグリッドに配置されます。
ユーザーは行数を指定しますが、1 行の文字数は指定しません。
 expression.LayoutMode

expression 必ず指定します。PageSetup オブジェクトを表すオブジェクト式を指定します。

 次の使用例は、入力した文字列が自動的にグリッドに配置されるように、作業中の文書の文字のレイアウト モードを設定します。
ActiveDocument.PageSetup.LayoutMode = wdLayoutModeGenko


PageSetup オブジェクト は、ページ設定の説明を表します。
PageSetup オブジェクトには、文書のすべてのページ設定の属性 (左余白、下余白、用紙サイズなど) がプロパティとして含まれます。
 PageSetup プロパティを使用して PageSetup オブジェクトを取得します。

次の使用例は、作業中の文書の最初のセクションの印刷の向きを横に設定し、文書を印刷します。
ActiveDocument.Sections(1).PageSetup.Orientation = _
    wdOrientLandscape
ActiveDocument.PrintOut

 次の使用例は、"Sales.doc" という名前の文書のすべての余白を設定します。
With Documents("Sales.doc").PageSetup
    .LeftMargin = InchesToPoints(0.75)
    .RightMargin = InchesToPoints(0.75)
    .TopMargin = InchesToPoints(1.5)
    .BottomMargin = InchesToPoints(1)
End With


Styles コレクション オブジェクト は、組み込みスタイルおよびユーザー設定スタイルの両方を表す Style オブジェクトのコレクションです。

 Styles プロパティを使用して Styles コレクションを取得します。

次の使用例は、作業中の文書のすべてのユーザー定義スタイルを削除します。
For Each sty In ActiveDocument.Styles
    If sty.BuiltIn = False Then sty.Delete
Next sty

 Add メソッドを使用して、新しいユーザー定義スタイルを作成し、Styles コレクションに追加します。

次の使用例は、"Introduction" という名前の新しい文字スタイルを追加し、12 ポイントの Arial に設定し、太字と斜体の書式を設定します。
その後、この新しい文字スタイルを選択範囲に適用します。
Set myStyle = ActiveDocument.Styles.Add(Name:="Introduction", _
    Type:=wdStyleTypeCharacter)
With myStyle.Font
    .Bold = True
    .Italic = True
    .Name = "Arial"
    .Size = 12
End With
Selection.Range.Style = "Introduction"

 Styles(Index) を使用して 1 つの Style オブジェクトを取得します (Index には、スタイル名、WdBuiltinStyle クラスの定数、またはインデックス番号を指定します)。
スタイル名は全角、半角やスペースが正確に一致している必要がありますが、大文字と小文字は区別されません。

次の使用例は、作業中の文書の "Color" という名前のユーザー定義スタイルのフォントを変更します。
ActiveDocument.Styles("Color").Font.Name = "Arial"

 次の使用例は、組み込みの [見出し 1] スタイルを太字にしないように設定します。
ActiveDocument.Styles(wdStyleHeading1).Font.Bold = False

 スタイルのインデックス番号は、コード順に並べられたスタイル名の一覧でのスタイルの位置を表します。Styles(1) はこの一覧の最初のスタイルです。

次の使用例は、Styles コレクションの最初のスタイルの基本スタイルとスタイル名を表示します。
MsgBox "Base style= " _
    & ActiveDocument.Styles(1).BaseStyle & vbCr _
    & "Style name= " & ActiveDocument.Styles(1).NameLocal

 Styles オブジェクトは Template オブジェクトからは使用できません。ただし、OpenAsDocument メソッドを使用して、テンプレートのスタイルを変更できるように、テンプレートを文書として開くこともできます。

次の使用例は、作業中の文書に添付されたテンプレートの [見出し 1] スタイルの書式を変更します。
Set aDoc = ActiveDocument.AttachedTemplate.OpenAsDocument
With aDoc
    .Styles(wdStyleHeading1).Font.Name = "Arial"
    .Close SaveChanges:=wdSaveChanges
End With

 OrganizerCopy メソッドを使用して、文書とテンプレート間でスタイルをコピーします。
UpdateStyles メソッドを使用して、添付されたテンプレートのスタイル定義と一致するように、作業中の文書のスタイルを更新します。


Document.UpdateStyles メソッド は、添付されたテンプレートのすべてのスタイルを文書にコピーします。
文書のスタイルの名前がテンプレートのスタイルの名前と同じ場合は、上書きします。

 構文
 .UpdateStyles
    必ず指定します。Document オブジェクトを表す変数を指定します。

 次の使用例は、添付されたテンプレートのスタイルを開かれた各文書にコピーし、文書を閉じます。
For Each aDoc In Documents
    aDoc.UpdateStyles
    aDoc.Close SaveChanges:=wdSaveChanges
Next aDoc

 次の使用例は、作業中の文書に添付されたテンプレートの [見出し 1] スタイルの書式を変更します。
[見出し 1] スタイルを含めて、作業中の文書のスタイルを更新します。
Set aDoc = ActiveDocument.AttachedTemplate.OpenAsDocument
With aDoc.Styles(wdStyleHeading1).Font
    .Name = "Arial"
    .Bold = False
End With
aDoc.Close SaveChanges:=wdSaveChanges
ActiveDocument.UpdateStyles


ParagraphFormat プロパティ は、指定範囲、選択範囲、検索または置換操作、あるいはスタイルの段落設定を表す ParagraphFormat オブジェクトを取得します。値の取得および設定が可能です。

 次の使用例は、現在選択されている部分の段落書式を右揃えに設定します。
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight

 次の使用例は、MyDoc.doc の全体の段落書式を設定します。この文書の段落は、ユーザー設定のタブ位置が 6.25 mm の位置に、行間が 1 行に設定されます。
Set myRange = Documents("MyDoc.doc").Content
With myRange.ParagraphFormat
    .Space2
    .TabStops.Add Position:=InchesToPoints(.25)
End With

 次の使用例は、作業中の文書の [見出し 2] スタイルを変更します。このスタイルが設定された段落は、最初のタブ位置までインデントされ、行間が 1 行になります。
With ActiveDocument.Styles(wdStyleHeading2).ParagraphFormat
    .TabIndent(1)
    .Space2
End With

 次の使用例は、作業中の文書で行間が 1 行の段落をすべて検索し、行間を 0.5 行にします。
With ActiveDocument.Content.Find
    .ClearFormatting
    .ParagraphFormat.Space2
    .Replacement.ClearFormatting
    .Replacement.ParagraphFormat.Space15
    .Execute FindText:="", ReplaceWith:="", _
        Replace:=wdReplaceAll
End With


ParagraphFormat オブジェクト
 Format プロパティを使用して、1 つまたは複数の段落の ParagraphFormat オブジェクトを取得します。ParagraphFormat プロパティは、選択範囲、指定範囲、スタイル、Find オブジェクト、または Replacement オブジェクトの ParagraphFormat オブジェクトを返します。

次の使用例は、作業中の文書の 3 番目の段落を中央揃えに配置します。
ActiveDocument.Paragraphs(3).Format.Alignment = _
    wdAlignParagraphCenter

 次の使用例は、選択範囲の後で、間隔が 2 行に設定されている最初の段落を検索します。
With Selection.Find
    .ClearFormatting
    .ParagraphFormat.LineSpacingRule = wdLineSpaceDouble
    .Text = ""
    .Forward = True
    .Wrap = wdFindContinue
End With
Selection.Find.Execute

解説

 Visual Basic の New キーワードを使用して、新しい ParagraphFormat オブジェクトを作成できます。

次の使用例は、ParagraphFormat オブジェクトを作成し、そのオブジェクトに任意の書式プロパティを設定し、すべてのプロパティを作業中の文書内の最初の段落に適用します。
Dim myParaF As New ParagraphFormat
myParaF.Alignment = wdAlignParagraphCenter
myParaF.Borders.Enable = True
ActiveDocument.Paragraphs(1).Format = myParaF

 Duplicate プロパティを使用して、既存の ParagraphFormat オブジェクトのスタンドアロン コピーを作成することもできます。

次の使用例は、作業中の文書で最初の段落の段落書式を複製し、myDup に格納します。myDup の左インデントを 25mm に変更し、新しい文書を作成します。文書に文字列を挿入し、myDup の段落書式を段落に適用します。
Set myDup = ActiveDocument.Paragraphs(1).Format.Duplicate
myDup.LeftIndent = MillimetersToPoints(25)
Documents.Add
Selection.InsertAfter "これは新しい段落です。"
Selection.Paragraphs.Format = myDup


Sections プロパティ は、指定された文書、指定範囲、または選択範囲内のセクションを表す Sections コレクションを取得します。値の取得のみ可能です。
 コレクションのメンバーを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

 次の使用例は、作業中の文書で、すべてのセクションの用紙の向きを設定します。
For Each sec In ActiveDocument.Sections
    sec.PageSetup.Orientation = wdOrientLandscape
Next sec

 次の使用例は、新しい文書を作成し、文書に文字列を追加します。次に、その文書に新しいセクションを作成し、新しいセクションに文字列を挿入します。
Set myDoc = Documents.Add
Selection.InsertAfter "これは、最初のセクションです。"
Set mysec = myDoc.Sections.Add
mysec.Range.InsertAfter "これは、2 番目のセクションです。"


Sections コレクション オブジェクト は、選択範囲、指定範囲、または文書の Section オブジェクトのコレクションです。

 Sections プロパティを使用して Sections コレクションを取得します。

次の使用例は、作業中の文書の最後のセクションの末尾に文字列を挿入します。
With ActiveDocument.Sections.Last.Range
    .Collapse Direction:=wdCollapseEnd
    .InsertAfter "end of document"
End With

 Add または InsertBreak メソッドを使用して、新しいセクションを文書に追加します。

次の使用例は、作業中の文書の先頭に新しいセクションを追加します。
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
ActiveDocument.Sections.Add Range:=myRange
myRange.InsertParagraphAfter

 次の使用例は、作業中の文書のセクション数を表示し、選択範囲の最初の段落の前にセクション区切りを追加し、再びセクション数を表示します。
MsgBox ActiveDocument.Sections.Count & " sections"
Selection.Paragraphs(1).Range.InsertBreak _
    Type:=wdSectionBreakContinuous
MsgBox ActiveDocument.Sections.Count & " sections"

 Sections(index) を使用して 1 つの Section オブジェクトを取得します。index にはインデックス番号を指定します。

次の使用例は、作業中の文書の最初のセクションで左右のページ余白を設定します。
With ActiveDocument.Sections(1).PageSetup
    .LeftMargin = InchesToPoints(15)
    .RightMargin = InchesToPoints(15)
End With


Section オブジェクト は、選択範囲、指定範囲、または文書の 1 つのセクションを表します。Section オブジェクトは Sections コレクションのメンバーです。Sections コレクションには、選択範囲、指定範囲、または文書のすべてのセクションが含まれます。

 Sections(index) を使用して 1 つの Section オブジェクトを取得します。index にはインデックス番号を指定します。

次の使用例は、作業中の文書の最初のセクションで左右のページ余白を設定します。
With ActiveDocument.Sections(1).PageSetup
    .LeftMargin = InchesToPoints(0.5)
    .RightMargin = InchesToPoints(0.5)
End With

 Add または InsertBreak メソッドを使用して、新しいセクションを文書に追加します。

次の使用例は、作業中の文書の先頭に新しいセクションを追加します。
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
ActiveDocument.Sections.Add Range:=myRange
myRange.InsertParagraphAfter

 次の使用例は、選択範囲の最初の段落の上にセクション区切りを追加します。
Selection.Paragraphs(1).Range.InsertBreak _
    Type:=wdSectionBreakContinuous

 メモ   指定された Section オブジェクトの Headers および Footers プロパティは HeadersFooters オブジェクトを返します。


Headers プロパティ は、指定したセクションのヘッダーを示す HeadersFooters コレクションを取得します。値の取得のみ可能です。
 コレクションのメンバーを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

 指定したセクションのフッターを示す HeadersFooters コレクションを取得するには、Footers プロパティを使用します。

 次の使用例は、作業中の文書の先頭ページを除くすべてのページのヘッダーの中央にページ番号を挿入します。先頭ページには別のヘッダーを作成します。
With ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary)
    .PageNumbers.Add _
        PageNumberAlignment:=wdAlignPageNumberCenter, _
        FirstPage:=False
End With

 次の使用例は、作業中の文書で、先頭ページのヘッダーに文字列を挿入します。
ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = True
With ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage)
    .Range.InsertAfter("先頭ページ")
    .Range.Paragraphs.Alignment = wdAlignParagraphRight
End With


HeadersFooters コレクション オブジェクト は、文書の指定されたセクションのヘッダーまたはフッターを表す HeaderFooter オブジェクトのコレクションです。

 Headers または Footers プロパティを使用して HeadersFooters コレクションを取得します。

次の使用例は、作業中の文書の最初のセクションのプライマリ フッターの文字列を表示します。
With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary)
    If .Range.Text <> vbCr Then
        MsgBox .Range.Text
    Else
        MsgBox "フッターには何も入力されていません。"
    End If
End With

 メモ   HeaderFooter オブジェクトを HeadersFooters コレクションに追加することはできません。
 Headers(index) または Footers(index) を使用して HeaderFooter オブジェクトを取得します。引数 index には WdHeaderFooterIndex クラスの定数の wdHeaderFooterEvenPageswdHeaderFooterFirstPagewdHeaderFooterPrimary のいずれかを指定します。

次の使用例は、作業中の文書の最初のセクションのプライマリ ヘッダーおよびプライマリ フッターの文字列を変更します。
With ActiveDocument.Sections(1)
    .Headers(wdHeaderFooterPrimary).Range.Text = "ヘッダー文字列"
    .Footers(wdHeaderFooterPrimary).Range.Text = "フッター文字列"
End With

 Selection オブジェクトに対して HeaderFooter プロパティを使用すると、HeaderFooter オブジェクトを取得することもできます。

 PageSetup オブジェクトに対して DifferentFirstPageHeaderFooter プロパティを使用して、先頭ページに異なるヘッダーやフッターを指定します。

次の使用例は、作業中の文書の先頭ページのフッターに文字列を挿入します。
With ActiveDocument
    .PageSetup.DifferentFirstPageHeaderFooter = True
    .Sections(1).Footers(wdHeaderFooterFirstPage) _
        .Range.InsertBefore _
        "Written by 石田 久美"
End With

 PageSetup オブジェクトに対して OddAndEvenPagesHeaderFooter プロパティを使用して、奇数ページと偶数ページに異なるヘッダーとフッターを指定します。OddAndEvenPagesHeaderFooter プロパティの値が True である場合、定数 wdHeaderFooterPrimary を使用すると、奇数ページのヘッダーおよびフッターを取得することができます。また、定数 wdHeaderFooterEvenPages を使用すると、偶数ページのヘッダーおよびフッターを取得することができます。
 PageNumbers オブジェクトに対して Add メソッドを使用して、ページ番号をヘッダーまたはフッターに追加します。

次の使用例は、作業中の文書の最初のセクションに含まれる先頭ページのフッターにページ番号を追加します。
With ActiveDocument.Sections(1)
    .PageSetup.DifferentFirstPageHeaderFooter = True
    .Footers(wdHeaderFooterPrimary).PageNumbers.Add _
        FirstPage:=True
End With


HeaderFooter オブジェクト は、ヘッダーまたはフッターを表します。HeaderFooter オブジェクトは HeadersFooters コレクションのメンバーです。HeadersFooters コレクションには、指定された文書のセクションのすべてのヘッダーおよびフッターが含まれます。

 Headers(index) または Footers(index) を使用して HeaderFooter オブジェクトを取得します。引数 index には WdHeaderFooterIndex クラスの定数の wdHeaderFooterEvenPageswdHeaderFooterFirstPagewdHeaderFooterPrimary のいずれかを指定します。

次の使用例は、作業中の文書内の最初のセクションのプライマリ ヘッダーおよびプライマリ フッターの文字列を変更します。
With ActiveDocument.Sections(1)
    .Headers(wdHeaderFooterPrimary).Range.Text = "ヘッダー文字列"
    .Footers(wdHeaderFooterPrimary).Range.Text = "フッター文字列"
End With

 Selection オブジェクトに対して HeaderFooter プロパティを使用すると、HeaderFooter オブジェクトを取得することもできます。
 メモ   HeaderFooter オブジェクトを HeadersFooters コレクションに追加することはできません。

 PageSetup オブジェクトに対して DifferentFirstPageHeaderFooter プロパティを使用して、先頭ページに異なるヘッダーやフッターを指定します。

次の使用例は、作業中の文書の先頭ページのフッターに文字列を挿入します。
With ActiveDocument
    .PageSetup.DifferentFirstPageHeaderFooter = True
    .Sections(1).Footers(wdHeaderFooterFirstPage) _
        .Range.InsertBefore _
        "作成者 : 増田 聡一郎"
End With

 PageSetup オブジェクトに対して OddAndEvenPagesHeaderFooter プロパティを使用して、奇数ページと偶数ページに異なるヘッダーとフッターを指定します。OddAndEvenPagesHeaderFooter プロパティの値が True である場合、定数 wdHeaderFooterPrimary を使用すると、奇数ページのヘッダーおよびフッターを取得することができます。また、定数 wdHeaderFooterEvenPages を使用すると、偶数ページのヘッダーおよびフッターを取得することができます。
 PageNumbers オブジェクトに対して Add メソッドを使用して、ページ番号をヘッダーまたはフッターに追加します。

次の使用例は、作業中の文書内の最初のセクションに含まれる先頭ページのフッターにページ番号を追加します。
With ActiveDocument.Sections(1)
    .Footers(wdHeaderFooterPrimary).PageNumbers.Add
End With


HeaderFooter プロパティ は、指定された選択範囲または指定範囲に含まれる HeaderFooter オブジェクトを取得します。値の取得のみ可能です。
 メモ   ヘッダーまたはフッター内に選択範囲がない場合は、エラーが発生します。

 次の使用例は、中央揃えのページ番号を現在のページ フッターに追加します。
With ActiveDocument.ActiveWindow.View
    .Type = wdPrintView
    .SeekView = wdSeekCurrentPageFooter
End With
Selection.HeaderFooter.PageNumbers.Add _
    PageNumberAlignment:=wdAlignPageNumberCenter


Footers プロパティ は、指定されたセクションのフッターを表す HeadersFooters コレクションを取得します。値の取得のみ可能です。
 コレクションのメンバーを取得する方法については、「コレクションからオブジェクトを取得する」を参照してください。

 次の使用例は、作業中の文書の最初のセクションのフッターにページ番号を追加し、右揃えにします。
With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary)
    .PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberRight
End With


PageNumber オブジェクト は、ヘッダーまたはフッターのページ番号を表します。
PageNumber オブジェクトは PageNumbers コレクションのメンバーです。
PageNumbers コレクションには、1 つのヘッダーまたはフッターのすべてのページ番号が含まれます。

 PageNumbers(index) を使用して 1 つの PageNumber オブジェクトを取得します。引数 index にはインデックス番号を指定します。ほとんどの場合、ヘッダーまたはフッターには、インデックス番号 1 のページ番号が 1 つだけ含まれます。

次の使用例は、作業中の文書の最初のセクションで、プライマリ ヘッダーの最初のページ番号を中央揃えに配置します。
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary) _
    .PageNumbers(1).Alignment = wdAlignPageNumberCenter

 Add メソッドを使用して、ページ番号 (PAGE フィールド) をヘッダーまたはフッターに追加します。

次の使用例は、最初のセクションおよびそれ以降のセクションのプライマリ フッターにページ番号を追加します。ページ番号は先頭ページには表示されません。
With ActiveDocument.Sections(1)
    .Footers(wdHeaderFooterPrimary).PageNumbers.Add _
        PageNumberAlignment:=wdAlignPageNumberLeft, _
        FirstPage:=False
End With


Document.Range メソッド は、指定された開始文字位置および終了文字位置を使用して、Range オブジェクトを返します。
構文
.Range(Start, End)
   必ず指定します。Document オブジェクトを表す変数を指定します。
パラメータ
名前必須/オプションデータ型説明
Startオプションバリアント型 (Variant)開始文字位置を指定します。
Endオプションバリアント型 (Variant)終了文字位置を指定します。
戻り値Range

次の使用例は、作業中の文書の最初の 10 文字に太字を設定します。
Sub DocumentRange()
    ActiveDocument.Range(Start:=0, End:=10).Bold = True
End Sub

次の使用例は、現在の文書の先頭からカーソル位置までを範囲として設定し、その範囲内にあるすべての文字を大文字に変換します。
Sub DocumentRange2()
    Dim r As Range
    Set r = ActiveDocument.Range(Start:=0, End:=Selection.End)
    r.Case = wdUpperCase
End Sub

次の使用例は、変数 myRange に現在の文書内の 3 〜 6 番目の段落を格納し、その範囲内の段落を右揃えに配置します。
Sub DocumentRange3()
    Dim aDoc As Document
    Dim myRange As Range
    Set aDoc = ActiveDocument
    If aDoc.Paragraphs.Count >= 6 Then
        Set myRange = aDoc.Range(aDoc.Paragraphs(2).Range.Start, _
            aDoc.Paragraphs(4).Range.End)
        myRange.Paragraphs.Alignment = wdAlignParagraphRight
    End If
End Sub


Paragraph.Range プロパティ は、指定した段落に含まれる文書の一部を表す Range オブジェクトを取得します。
構文
.Range
   必ず指定します。Paragraph オブジェクトを表す変数を指定します。

次の使用例は、作業中の文書の最初の段落に [見出し 1] スタイルを設定します。
ActiveDocument.Paragraphs(1).Range.Style = wdStyleHeading1


Cell.Range プロパティ は、指定したオブジェクトに含まれる文書の一部を示す Range オブジェクトを取得します。
構文
.Range
   Cell オブジェクトを表す変数を指定します。

次の使用例は、最初の表の先頭行の 1 番目のセルの内容をコピーします。
If ActiveDocument.Tables.Count >= 1 Then _
    ActiveDocument.Tables(1).Rows(1).Cells(1).Range.Copy


PageSetup.DifferentFirstPageHeaderFooter プロパティ は、True を設定すると、先頭ページでは他のページと異なるヘッダーとフッターが使用されます。
使用できる値は、TrueFalse、定数 wdUndefined のいずれかです。値の取得および設定が可能です。長整数型 (Long) の値を使用します。
構文
.DifferentFirstPageHeaderFooter
   PageSetup オブジェクトを返す式を指定します。

次の使用例は、作業中の文書の各セクションを調べ、先頭ページで他のページと異なるヘッダーとフッターが使われているかどうかを確認します。
異なるヘッダーとフッターが使われている場合は、メッセージを表示します。
Dim secLoop As Section

For Each secLoop In ActiveDocument.Sections
    If secLoop.PageSetup _
           .DifferentFirstPageHeaderFooter = True Then
        Msgbox "セクション " & secLoop.Index _
            & " では、先頭ページで他のページと異なるヘッダーとフッターが使われています。"
    End If
Next secLoop


SeekView プロパティ は、印刷レイアウト表示モードで表示される文書要素を設定します。値の取得および設定が可能です。
使用できる定数は、次に示す WdSeekView クラスの定数のいずれかです。
wdSeekCurrentPageFooter
wdSeekCurrentPageHeader
wdSeekEndnotes
wdSeekEvenPagesFooter
wdSeekEvenPagesHeader
wdSeekFirstPageFooter
wdSeekFirstPageHeader
wdSeekFootnotes
wdSeekMainDocument
wdSeekPrimaryFooter
wdSeekPrimaryHeader

expression.SeekView
expression 必ず指定します。View オブジェクトを表すオブジェクト式を指定します。

印刷レイアウト表示モード以外の表示モードでこのプロパティを使用すると、エラーが発生します。

次の使用例は、作業中の文書に脚注がある場合、印刷レイアウト表示で脚注を表示します。
If ActiveDocument.Footnotes.Count >= 1 Then
    With ActiveDocument.ActiveWindow.View
        .Type = wdPrintView
        .SeekView = wdSeekFootnotes
    End With
End If

次の使用例は、現在のセクションの最初のページ フッターを表示します。
ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = True
With ActiveDocument.ActiveWindow.View
    .Type = wdPrintView
    .SeekView = wdSeekFirstPageFooter
End With

次の使用例は、印刷レイアウト表示モードで選択した範囲が脚注または文末脚注の領域内にある場合、メイン文書に切り替えます。
Set myView = ActiveDocument.ActiveWindow.View
If myView.SeekView = wdSeekFootnotes Or _
    myView.SeekView = wdSeekEndnotes Then
    myView.SeekView = wdSeekMainDocument
End If


View オブジェクト は、ウィンドウまたはウィンドウ枠の表示属性 (すべて表示、フィールドの網かけ、表のグリッド線など) を含みます。

View プロパティを使用して View オブジェクトを取得します。

次の使用例は、作業中のウィンドウの表示オプションを設定します。
With ActiveDocument.ActiveWindow.View
    .ShowAll = True
    .TableGridlines = True
    .WrapToWindow = False
End With

Type プロパティを使用して表示モードを変更します。

次の使用例は、作業中のウィンドウを下書き表示に切り替えます。
ActiveDocument.ActiveWindow.View.Type = wdNormalView

Percentage プロパティを使用して、画面の表示を変更します。

次の使用例は、画面の表示を 120% に設定します。
ActiveDocument.ActiveWindow.View.Zoom.Percentage = 120

SeekView プロパティを使用して、コメント、文末脚注、脚注、あるいは文書のヘッダーまたはフッターを表示します。

次の使用例は、印刷レイアウト モードで作業中のウィンドウに現在のフッターを表示します。
With ActiveDocument.ActiveWindow.View
    .Type = wdPrintView
    .SeekView = wdSeekCurrentPageFooter
End With


View プロパティ は、指定したウィンドウまたはウィンドウ枠の表示を表す View オブジェクトを取得します。
expression.View
expression 必ず指定します。対象となるオブジェクトへの参照を表すオブジェクト式を指定します。

次の使用例は、作業中のウィンドウを全画面表示に切り替えます。
ActiveDocument.ActiveWindow.View.FullScreen = True

次の使用例は、Windows コレクションの最初のウィンドウと関連するウィンドウ枠にすべての編集記号を表示します。
Dim myPane as Pane
For Each myPane In Windows(1).Panes
    myPane.View.ShowAll = True
Next myPane

次の使用例は、Windows コレクションの各ウィンドウに表示オプションを設定します。
Dim myWindow as Window
For Each myWindow In Windows
    With myWindow.View
        .ShowTabs = True
        .ShowParagraphs = True
        .Type = wdNormalView
    End With
Next myWindow

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


文書中のフォント名と色の一覧を出力

 Word 文書の中で使われいてるフォントの名前と色を調べたい時に使います。
 このマクロは、「インストラクターのネタ帳」の「フォント名を取得するWordマクロ」で紹介いただいているコードを、微修正したものです。
http://www.relief.jp/itnote/archives/word-macro-get-all-font-names.php

使い方:
 マクロを起動させると、ファイルを開くダイアログが表示されるので、調べたい文書を選択・指定します。
 マクロの文書に、取得した結果が表示されます。

このマクロをダウンロードできます。→ListUpAllFontNamesAndColorsVBA01.doc

注意:
このマクロは、本文だけを調べています。図形内の文字列やヘッダー・フッターも調べたい場合は、下記「Wordで使用されているフォントを知るには」のページを参照下さい。
http://oshiete.goo.ne.jp/qa/1698812.html

Option Explicit
Option Base 1

Sub 指定ワードのフォント名と色を取得()

   Dim 現在のパス As String
   Dim 開始日時 As Variant
   Dim 終了日時 As Variant
   Dim 対象文書名 As String
   Dim dicフォント As Object    ' Scripting.Dictionary
   Dim dic色 As Object
   Dim 文字 As Range            ' Charactes.Item
   Dim フォント名 As Variant    ' フォント名
   Dim フォント名一覧 As String
   Dim 色名 As Variant          ' フォント色
   Dim 色名一覧 As String
   
   ThisDocument.Activate
   現在のパス = ActiveDocument.Path
   ChDrive 現在のパス
   ChDir 現在のパス
   
   MsgBox "調査対象のワード文書を指定して下さい。"
   ChangeFileOpenDirectory ThisDocument.Path
   With Dialogs(wdDialogFileOpen)
      .Name = "*.doc*"
      If .Show = -1 Then
         対象文書名 = .Name 'パス無しの文書ファイル名
      End If
   End With
   
   If 対象文書名 = ThisDocument.Name Then
      MsgBox "選択した文書は、このファイル自身です。" & vbNewLine _
      & "調査対象のファイルを選択して下さい。"
      Exit Sub
   End If

   開始日時 = Now                ' 開始時刻を変数に格納します。
   
   Documents(対象文書名).Activate
   
   Set dicフォント = CreateObject("Scripting.Dictionary")
   Set dic色 = CreateObject("Scripting.Dictionary")

   For Each 文字 In ActiveDocument.Characters
      If dicフォント.Exists(文字.Font.Name) = False Then
        dicフォント.Add 文字.Font.Name, ""
      End If

      If dic色.Exists(文字.Font.ColorIndex) = False Then
         dic色.Add 文字.Font.ColorIndex, ""
      End If
   Next 文字

   フォント名一覧 = ""
   For Each フォント名 In dicフォント.Keys
     フォント名一覧 = フォント名一覧 & フォント名 & vbCrLf
   Next フォント名
   
   色名一覧 = ""
   For Each 色名 In dic色.Keys
     色名一覧 = 色名一覧 & 色名 & vbCrLf
   Next 色名
   
   Set dicフォント = Nothing
   Set dic色 = Nothing

   ThisDocument.Activate

   '5行目以降を消去する
   Selection.MoveDown Unit:=wdLine, Count:=5
   Selection.EndKey Unit:=wdStory, Extend:=wdExtend
   Selection.Delete Unit:=wdCharacter, Count:=1
   
   'テキストを記入するために、5行目に移動する
   Selection.MoveDown Unit:=wdLine, Count:=5
    
   With Selection
      .TypeText Text:=vbNewLine & vbNewLine & 対象文書名 & " で以下のフォントが使われています。" & vbNewLine
      .TypeText Text:=フォント名一覧 & vbNewLine & vbNewLine
      .TypeText Text:=対象文書名 & " で以下の色が使われています。" & vbNewLine
      .TypeText Text:=色名一覧
   End With

   終了日時 = Now
   MsgBox "処理を終了しました。" & vbNewLine & "処理時間は、" _
   & Format(終了日時 - 開始日時, "hh時間nn分ss秒") & " でした。"
   
End Sub

 解説:
色指定ColorIndexプロパティに対応するColorプロパティ一覧
http://helpforest.com/excel/ex_list/ex120002.htm
この種類の目次に戻る↑ 索引へ↓ トップページに戻る


ホームページのトップに戻る