TOP > blog > エクセルからワードのテキストブロックの段落を制御する
スクリプト
2017/02/27

エクセルからワードのテキストブロックの段落を制御する

管理者用
blog

宛名のレイアウト・・・・・・を目標と言う事で、
前回は、テキストのフォントオブジェクトが持つ機能から、宛名レイアウトに使うと思われる項目について紹介しました。
今回は、段落に絡む項目です。
Wordのツールバーの段落に当たる機能になると思います。

 

[マクロの記録]を通して、段落に絡む項目をトレースしました。
以下に示すように多くの項目の指定が可能のようです。


With TextFramA1.TextFrame.TextRange.ParagraphFormat
        .LeftIndent = MillimetersToPoints(0)
        .RightIndent = MillimetersToPoints(0)
        .SpaceBefore = 0
        .SpaceBeforeAuto = False
        .SpaceAfter = 0
        .SpaceAfterAuto = False
        .LineSpacingRule = wdLineSpaceExactly
        .LineSpacing = 28
        .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
        .CollapsedByDefault = False
        .AutoAdjustRightIndent = True
        .DisableLineHeightGrid = False
        .FarEastLineBreakControl = True
        .WordWrap = True
        .HangingPunctuation = True
        .HalfWidthPunctuationOnTopOfLine = False
        .AddSpaceBetweenFarEastAndAlpha = True
        .AddSpaceBetweenFarEastAndDigit = True
        .BaselineAlignment = wdBaselineAlignAuto
End With

この中から、宛名のレイアウトに最低限必要と思われる機能を探しました。

 配置の設定  両端揃え、センター揃えなどの設定です。


TextFramA1.TextFrame.TextRange.ParagraphFormat.Alignment = wdAlignParagraphJustify

オブジェクトブラザーから以下の定数が存在します。


wdAlignParagraphLeft  0 左
wdAlignParagraphCenter 1 中央揃え
wdAlignParagraphRight  2 右
wdAlignParagraphJustify  3 両端
wdAlignParagraphDistribute 4 均等割り付け
wdAlignParagraphJustifyMed
wdAlignParagraphJustifyHi
wdAlignParagraphJustifyLow
wdAlignParagraphThaiJustify

 

行間の設定


 TextFramA1.TextFrame.TextRange.ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
  TextFramA1.TextFrame.TextRange.ParagraphFormat.LineSpacing = 28

.LineSpacingRule = の定数には以下の項目が有ります。この項目に併せて、.LineSpacing = の数値を設定します。


wdLineSpaceSingle        '0    1行
wdLineSpace1pt5        '1   1.5行
wdLineSpaceDouble      '2   2行
wdLineSpaceAtLeast     '3   最小値
wdLineSpaceExactly     '4   固定値
wdLineSpaceMultiple    '5   倍数

 

揃え位置  テキストボックスに対し配置の位置を設定します。


TextFramA1.TextFrame.VerticalAnchor = msoAnchorBottom

 .VerticalAnchorの定数には以下の値が有ります。


msoAnchorTop                 '1
msoAnchorTopBaseline         '2
msoAnchorMiddle              '3
msoAnchorBottom              '4
msoAnchorBottomBaseLine      '5
msoVerticalAnchorMixed      '-2

 

サンプルマクロの実行結果です。

右側が、今回の項目を入れた結果です。

  

 ここまで来れば、自動組版が可能になりそうです。

  サンプルマクロ全体


Sub Macro05()

    Dim myWord As New Word.Application         ' Word 起動
    Dim docWord As Document                    
    
    Set myWord = CreateObject("Word.Application")
    Set docWord = myWord.Documents.Add
        ' Word を表示する
    myWord.Visible = True
    
    InData = Sheet1.Cells(2, 6) 'シート1の2行4列のデータ
    InData = InData & vbCr & Sheet1.Cells(2, 7) 'シート1の2行4列のデータ
    
    Rem ブックのサイズをはがきサイズに
    With docWord.PageSetup
        .PageWidth = MillimetersToPoints(100)
        .PageHeight = MillimetersToPoints(148)
        .LeftMargin = MillimetersToPoints(5)
        .RightMargin = MillimetersToPoints(5)
        .TopMargin = MillimetersToPoints(5)
        .BottomMargin = MillimetersToPoints(5)
    End With
    
Rem テキストボックスを作る
    Set TextFramA1 = docWord.Shapes.AddTextbox _
   (Orientation:=msoTextOrientationVerticalFarEast, Left:=144, Top:=60, Width:=80, Height:=300)
 
    TextFramA1.TextFrame.TextRange.Text = InData 'データを書き込む
        With TextFramA1.TextFrame.TextRange.Font
        .Name = "A-OTF リュウミン Std EH-KO"
        .Size = 10 'フォントサイズ
        .Bold = False   '太字 True
        .Spacing = 0   '文字間
        .Scaling = 100 '平体/長体
        .Position = 0   'ベースラインから
        End With
  With TextFramA1.TextFrame.TextRange.ParagraphFormat
        .SpaceBefore = 0    '前のスペース
        .SpaceBeforeAuto = False
        .SpaceAfter = 0 '後のスペース
        .SpaceAfterAuto = False
        .LineSpacingRule = wdLineSpaceExactly   '行間隔モード
        .LineSpacing = 10   '行間隔
        .Alignment = wdAlignParagraphJustify    '揃え方向
    End With

    With TextFramA1.TextFrame
       .VerticalAnchor = msoAnchorMiddle
       .MarginBottom = 0
       .MarginLeft = 0
       .MarginRight = 0
       .MarginTop = 0
    End With
   
End Sub

関連記事