スクリプト
2017/02/27
エクセルからワードのテキストブロックの段落を制御する
管理者用
宛名のレイアウト・・・・・・を目標と言う事で、
前回は、テキストのフォントオブジェクトが持つ機能から、宛名レイアウトに使うと思われる項目について紹介しました。
今回は、段落に絡む項目です。
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