Office Space: Microsoft Word で段落の周りに罫線を引く
Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介するコラムです。毎週火曜日と木曜日に新しいヒントを掲載します。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
Microsoft Word で段落の周りに罫線を引く
先週のコラムで、Microsoft Excel ワークシートのセルの周りに罫線を引く方法を紹介しました。それについてはよかったのですが、「なんだ、Microsoft "Word" で段落の周りに罫線を引く方法を知りたかったのに、周りに罫線を引くことについてのコラムは終わってしまったから、また何かの周りに罫線を引く方法についてのコラムはずっと先になるだろうな」と、少しがっかりした人もいるでしょう。
まあ、Scripting Guys が大変仕事熱心ならば多分そうですが、"Scripting Guys" と "大変" と "仕事" が同時に出てくるような文を耳にすることはめったにありません (「Scripting Guys に仕事をさせるのはどのくらい大変か」と言う場合は別です)。私たちはそんなに勤勉ではないので、いつも同じことを何度も繰り返し行う方法を探しています。最初の Scriptomatic はうまくいきましたか。すばらしい。では、別のスクリプトを書きましょう。皆さんは最初の Scripting Week を気に入りましたか。では、2 番目 (英語) に進みましょう。何かの周りに罫線を引くことについてコラムを書きましたっけ。では、もう一度罫線を引くことについてのスクリプトにしましょう。今回は Microsoft Word を使用します。
Const wdLineStyleSingle = 1
Const wdLineStyleNone = 0
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
i = 1
objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Borders.OutsideLineStyle = wdLineStyleSingle
objSelection.ParagraphFormat.Borders.Shadow = TRUE
objSelection.TypeText "This is the first paragraph."
objSelection.TypeParagraph()
i = i + 1
objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Borders.OutsideLineStyle = wdLineStyleNone
objSelection.TypeText "This is the second paragraph."
objSelection.TypeParagraph()
i = i + 1
objSelection.TypeText "This is the third paragraph."
objSelection.TypeParagraph()
i = i + 1
上記のスクリプトでは何を行っているのでしょう。そうです、まず、wdLineStyleSingle と wdLineStyleNone という定数のペアを定義しています。これらは、段落の周りに引く罫線の種類を指定するために後で使用します。次に、Word.Application オブジェクトのインスタンスを作成し、その Visible プロパティを True に設定しています。Add メソッドを使用して新しい文書を作成し、次のコード行を使用して Word の Selection オブジェクトのインスタンスを作成します。
Set objSelection = objWord.Selection
ご存知のとおり、これは皆さんが普段行っている方法よりもかなり余計な作業になります。そして、実行しても空の Word 文書が作成されるだけなのです。つまり、ここからいくつかの段落を作成し、それらの周りに罫線を引く必要があります。
さて、どんな方法があるのかを考えてみましょう。まず、値 1 を "i" というカウンタ変数に代入します。この変数を使用して、処理対象の段落番号を追跡します。段落の周りに罫線を引くには、まず、その段落を選択する必要がありますが、それを行うとても簡単な方法は、Paragraphs コレクションに格納されている段落番号を参照する方法です。ご想像どおり、文書の最初の段落は段落番号 1 で、2 番目の段落は段落番号 2 のようになります。新しい段落を作成するたびに、"i" を 1 だけ増やすので、どの段落を処理しているのかを正確に追跡するのに役立ちます。
特定の段落を選択するには、次のようなコードを使用します。
objDoc.Paragraphs(i).Range.Select
今の "i" の値はもちろん 1 なので、文書の最初の段落を選択しています。
段落を選択すると、罫線のプロパティを構成できるようになります。他に何も指定しなければ (これについては後で説明します)、段落全体を囲む四角形として罫線が引かれます。1 本線の四角形で段落を囲む場合は、次のコード行を使用します。このコード行で、OutsideLineStyle プロパティを構成しています。
objSelection.ParagraphFormat.Borders.OutsideLineStyle = wdLineStyleSingle
そうです、このスクリプトの冒頭で定義した定数の 1 つを使用しています。定数 wdLineStyleSingle (値は 1) を使用すると、1 本の標準な直線を引くことができます。別の線のスタイルを使用する場合はどうなるでしょうか。その場合は、次の表に示した定数 (および値) の 1 つを使用できます。
定数 |
値 |
wdLineStyleDashDot |
5 |
wdLineStyleDashDotDot |
6 |
wdLineStyleDashDotStroked |
20 |
wdLineStyleDashLargeGap |
4 |
wdLineStyleDashSmallGap |
3 |
wdLineStyleDot |
2 |
wdLineStyleDouble |
7 |
wdLineStyleDoubleWavy |
19 |
wdLineStyleEmboss3D |
21 |
wdLineStyleEngrave3D |
22 |
wdLineStyleInset |
24 |
wdLineStyleNone |
0 |
wdLineStyleOutset |
23 |
wdLineStyleSingle |
1 |
wdLineStyleSingleWavy |
18 |
wdLineStyleThickThinLargeGap |
16 |
wdLineStyleThickThinMedGap |
13 |
wdLineStyleThickThinSmallGap |
10 |
wdLineStyleThinThickLargeGap |
15 |
wdLineStyleThinThickMedGap |
12 |
wdLineStyleThinThickSmallGap |
9 |
wdLineStyleThinThickThinLargeGap |
17 |
wdLineStyleThinThickThinMedGap |
14 |
wdLineStyleThinThickThinSmallGap |
11 |
wdLineStyleTriple |
8 |
次に、面白そうなので、Shadow プロパティを True に設定します。ご想像どおり、装飾的な影付きの四角形でテキストが囲まれます。
注 : 外側の線の罫線プロパティには対応する内側の線の罫線プロパティがあります。たとえば、OutsideLineStyle だけではなく、これと対応する InsideLineStyle プロパティがあります。 |
TypeText メソッドを使用して簡単なテキストを入力したら、Enter キーを押します (段落 1 が終わります)。この操作は、TypeParagraph メソッドを使用してシミュレートします。この時点では、次のような文書になります。
次に、変数 "i" を 1 増やします (次に段落 2 を処理するためです)。Word の既定の処理では、段落の書式設定は直前の段落から継承されます。段落 2 の周りには罫線を引かないので、2 番目の段落を選択して、次のコード行を使用して線のスタイルを "罫線なし" に設定します。この処理は、この段落には罫線を "引かない" ことを意味します。
objSelection.ParagraphFormat.Borders.OutsideLineStyle = wdLineStyleNone
次に、文書に追加のテキストを入力して、無事終了です。このスクリプトを実行すると、結果の Word 文書は次のようになります。
おっと、これで上出来と思わないで、もう少しお付き合いください。
そう、罫線を作成する際に設定できるプロパティは他にもあります。たとえば、OutsideLineWidth プロパティを使用すると、罫線の太さを指定できます。次の表に、このプロパティの定数と値を示します。
定数 |
値 |
wdLineWidth025pt |
2 |
wdLineWidth050pt |
4 |
wdLineWidth075pt |
6 |
wdLineWidth100pt |
8 |
wdLineWidth150pt |
12 |
wdLineWidth225pt |
18 |
wdLineWidth300pt |
24 |
wdLineWidth450pt |
36 |
wdLineWidth600pt |
48 |
同様に、OutsideLineColorIndex プロパティを使用すると、段落の周りに色の付いた罫線が引けます。次の表に、このプロパティの定数と値を示します。
定数 |
値 |
wdAuto |
0 |
wdBlack |
1 |
wdBlue |
2 |
wdBrightGreen |
4 |
wdByAuthor |
-1 |
wdDarkBlue |
9 |
wdDarkRed |
13 |
wdDarkYellow |
14 |
wdGray25 |
16 |
wdGray50 |
15 |
wdGreen |
11 |
wdNoHighlight |
0 |
wdPink |
5 |
wdRed |
6 |
wdTeal |
10 |
wdTurquoise |
3 |
wdViolet |
12 |
wdWhite |
8 |
wdYellow |
7 |
ここで追加したプロパティの実際の表示がとても気にかかっていると思うので、最初の段落の周りに明るい緑の太線を引くように変更したスクリプトを次に示します。
Const wdLineStyleSingle = 1
Const wdLineStyleNone = 0
Const wdBrightGreen = 4
Const wdLineWidth300pt = 24
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
i = 1
objSelection.ParagraphFormat.Borders.OutsideLineStyle = wdLineStyleSingle
objSelection.ParagraphFormat.Borders.OutsideLineWidth = wdLineWidth300pt
objSelection.ParagraphFormat.Borders.OutsideColorIndex = wdBrightGreen
objSelection.TypeText "This is the first paragraph."
objSelection.TypeParagraph()
i = i + 1
objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Borders.OutsideLineStyle = wdLineStyleNone
objSelection.TypeText "This is the second paragraph."
objSelection.TypeParagraph()
i = i + 1
objSelection.TypeText "This is the third paragraph."
objSelection.TypeParagraph()
i = i + 1
そして、次に示すのは、このスクリプトの実行結果です。
「Office Space コラムを始める前は、いったいどうやって作業していたのか。」とはよいところに気が付きましたね。
先ほど、後で説明すると言いましたが、最後に触れておく必要があるのは段落を四角形で囲むだけにとどまらないということです。望むなら、段落の上下に罫線を引いたり、両端に罫線を引かないようにすることもできます (これらの任意の組み合わせが可能です)。この処理を行うには、次の定数の 1 つ以上をスクリプトで使用する必要があります。
定数 |
値 |
wdBorderBottom |
-3 |
wdBorderLeft |
-2 |
wdBorderRight |
-4 |
wdBorderTop |
-1 |
しかし、実際にはこれらの定数をどこで使用するのでしょうか。必要なのは、いずれかの定数を定義し、どの罫線をその定数で構成するかを示すことです。たとえば、段落の上の罫線だけを引くには、次のコードを使用します。
objSelection.ParagraphFormat.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
注 : 個々の罫線を処理する場合は、LineStyle や LineWidth などのプロパティを使用して、OutsideLineStyle や InsideLineWidth は使用しません。 |
たとえば、文書の最初の段落に、明るい緑の太線で段落の上だけに罫線を引くスクリプトを次に示します。
Const wdLineStyleSingle = 1
Const wdLineStyleNone = 0
Const wdBrightGreen = 4
Const wdLineWidth300pt = 24
Const wdBorderTop = -1
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
i = 1
objSelection.ParagraphFormat.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
objSelection.ParagraphFormat.Borders(wdBorderTop).LineWidth = wdLineWidth300pt
objSelection.ParagraphFormat.Borders(wdBorderTop).ColorIndex = wdBrightGreen
objSelection.TypeText "This is the first paragraph."
objSelection.TypeParagraph()
i = i + 1
objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Borders.OutsideLineStyle = wdLineStyleNone
objSelection.TypeText "This is the second paragraph."
objSelection.TypeParagraph()
i = i + 1
objSelection.TypeText "This is the third paragraph."
objSelection.TypeParagraph()
i = i + 1
そして、この実行結果を次に示します。
すばらしい。周りに罫線を引くことをテーマにした次回のコラムが待ち遠しいですね (ここまでくると、周りに罫線を引けるものについて説明していくしかありませんから)。