Word文書の各ページに10行程度の文章があり、各行の行頭と行末に文字列を挿入するマクロを作りたい、との質問をいただきました。
どのような文章なのかが分からないのですが、文字通り【各ページの各行ごと】ということであれば、伊藤さんのブログでも紹介されている「Lineオブジェクト」を使用して、下記のように書くことができます。
Public Sub Sample01()
'各ページの各行の行頭と行末に文字列を挿入
Dim tmp As Word.WdViewType
Dim r As Word.Range
Dim i As Long, j As Long, k As Long
With ActiveDocument.ActiveWindow
tmp = .View.Type '表示状態を記憶
.View.Type = wdPrintView '印刷レイアウトに変更
For i = .ActivePane.Pages.Count To 1 Step -1
For j = .ActivePane.Pages(i).Rectangles.Count To 1 Step -1
If .ActivePane.Pages(i).Rectangles(j).RectangleType = wdTextRectangle Then
For k = .ActivePane.Pages(i).Rectangles(j).Lines.Count To 1 Step -1
Set r = .ActivePane.Pages(i).Rectangles(j).Lines(k).Range
Select Case r.Characters(Len(r.Text)).Text
Case vbCr, vbLf, vbCrLf: r.SetRange r.Start, r.End - 1 '改行飛ばし
End Select
r.InsertAfter "【行末】"
r.InsertBefore "【行頭】"
Next
End If
Next
Next
.View.Type = tmp '表示状態を元に戻す
End With
End Sub
【各段落ごと】で良いのであれば、下記のように「Paragraphオブジェクト」を利用すれば良いかと思います。
Public Sub Sample02()
'各段落のはじめと終わりに文字列を挿入
Dim r As Word.Range
Dim i As Long
For i = ActiveDocument.Paragraphs.Count To 1 Step -1
Set r = ActiveDocument.Paragraphs(i).Range
Select Case r.Characters(Len(r.Text)).Text
Case vbCr, vbLf, vbCrLf: r.SetRange r.Start, r.End - 1 '改行飛ばし
End Select
r.InsertAfter "【行末】"
r.InsertBefore "【行頭】"
Next
End Sub
Word マクロの場合は、こういった処理を様々な書き方でできるため、対象となる文章に応じて、処理の仕方を変更する必要があります。


















この記事へのコメントはありません。