次のコードはマイクロソフトWordのマクロ(VBA)で文書内のすべての段落のインデントを10ポイントにする例である。
Sub インデントテスト()
For i = 1 To ActiveDocument.Paragraphs.Count
a = ActiveDocument.Paragraphs(i)
ActiveDocument.Paragraphs(i).Range.Select
With Selection.ParagraphFormat
.LeftIndent = 10
.FirstLineIndent = 0
End With
Next i
End Sub
For i = 1 To ActiveDocument.Paragraphs.Count
a = ActiveDocument.Paragraphs(i)
ActiveDocument.Paragraphs(i).Range.Select
With Selection.ParagraphFormat
.LeftIndent = 10
.FirstLineIndent = 0
End With
Next i
End Sub
段落の数を数え、それぞれの段落についてインデントを設定する。
LeftIndentにポイント数を入れ、左インデントを設定する。
FirstLineIndentは最初の行の左インデントを設定するためのもので、字下げやぶら下げをしない場合は「0」とする。
字下げやぶら下げをする場合は段落ダイアログを使う場合と違う挙動をするので注意を要する。
字下げをする場合は
LeftIndent = 10
FirstLineIndent = 10
FirstLineIndent = 10
とする。この場合、段落全体のインデントは10ポイントで、最初の行のインデントは20ポイントになる。
□□日本国民は、正当に選挙された国会におけ □る代表者を通じて行動し、われらとわれらの □子孫のために、
ぶら下げをする場合は
LeftIndent = 10
FirstLineIndent = -10
FirstLineIndent = -10
とする。この場合、最初の行のインデントは0ポイントで、二行目以降のインデントは10ポイントとなる。
つまり「LeftIndent」は二行目以降のインデントを表し、「FirstLineIndent」は最初の行のインデントと二行目以降とのインデントの差を表す。ぶら下げをする場合は、最初の行を「字上げ」すると考えると分かりやすい。
日本国民は、正当に選挙された国会における代 □表者を通じて行動し、われらとわれらの子孫 □のために、
実は、これだけならば、特にマクロを使う必要はない。
コードの3行目の「a = ActiveDocument.Paragraphs(i)」の部分を使えば、文字列の内容を判断してインデントの処理を振り分ける、というような使い方ができる。
なお、ここでは、インデントを直にセットする方法を書いたが、スタイルを使う方法もある。
コメント
.FirstLineIndent = n
の効果が確認されません
0 にしても 10 にしても変更が不可能です (>_<)
このプロパティを設定するには 他の設定とかが必要なのでしょうか?
それともタイミングの問題?
どうぞご教授下さい m(_ _)m
まず考えられるのはバージョンの違いによるものでしょうか。記事に書いた方法はWord2007で確認したものです。
他の設定による違いについては思い付きません。
通常の操作で段落に字下げやぶら下げの設定はできると思いますので、マクロの記録をしてみて、どのようにコードが書かれるか、確認してみてください。
あとはコードの前後関係でしょうか。差し支えない範囲で見せてもらえれば分かるかもしれません。
通りすがりの者です。
もう解決済みかと思いますが、たまたま私も同じ問題に遭遇し悩んでおりましたので。
私の場合は、
.CharacterUnitFirstLineIndent = 0
.FirstLineIndent = n
とすることで設定値が反映されました。
上記の処理順が逆の場合や、
CharacterUnitFirstLineIndentに0以外の値が設定されている場合はこちらが優先され、FirstLineIndentは変更できないような挙動でした。
ご参考になれば幸いです。
>ichitnkさん
「CharacterUnitFirstLineIndent」は知りませんでした。ネットでちょっと調べてみましたが、処理順が違うと期待通り動作しないなどクセがあるようですね。時間のあるときに試してみます。
ありがとうございました。