次の方法で共有


Office Space: 段落の背景色を変更する

Office Space

Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介する新しいコラムです。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

段落の背景色を変更する

先週のコラムでは、Microsoft Excel のセルの背景色を変更する方法について説明しました (このコラムを見損なったとしても自分を責める必要はありません。ここをクリックしてください)。先週のコラム自体に問題はないのですが、今の時代にあっては、Excel で背景色を変更する方法を扱いながら Microsoft Word にまで視野を広げないのは明らかに不公正であるとして訴えられるのは時間の問題であることに気付きました。そこで、そのような訴訟の芽をつみ取るべく、Microsoft Word で段落の背景色を変更する方法について説明することにしました。

メモ   大げさなことを言うと思われるかもしれませんが、Scripting Guys が訴えられる危険は常に存在しています。しかし、興味深いことに、そのような危険は決まって他の Microsoft 社員からもたらされるようです。

1 つの段落の背景色を変更するのは少しばかり厄介な作業です。その理由は 2 つあります。1 つは、段落が文書内のどこにあるかを特定する必要があることです。何はともあれ、スクリプトに対して変更する段落を指定できなければ、段落の背景色を変更することはできません。もう 1 つは、段落の背景色を設定するプロパティを直感的には特定できないことです (待ちきれないでしょうから言ってしまいますが、そのプロパティは Shading.BackgroundPatternColor です。このプロパティについては後でもう少し詳しく説明します)。

それから、色を設定するときには、赤、青、緑などの名前ではなく、16777215 や 65535 のような値を使用します。こういうことは、どさくさに紛れて言った方がよいと思ったもので。

でも、がっかりすることはありません。段落の背景色を変更できないということではありません。スクリプトの作成を開始する前に少し計画を練る必要があるだけのことです。

ここで、Word 文書を作成して 3 つの小さな段落を追加するスクリプトを見てみましょう。最初の段落は灰色、2 つ目の段落は白、3 つ目の段落は黄色にそれぞれ設定します。つまり、次のような段落を作成します。

Microsoft Word

こんな絵を 1 日中眺めていられたらいいのですが。でも私にはしなくてはならない仕事があります。特に大切な仕事は、スクリプトをご覧に入れることです。

Const wdColorWhite = 16777215
Const wdColorGray10 = 15132390
Const wdColorYellow = 65535

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

i = 1

objSelection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorGray10
objSelection.TypeText "This is the first paragraph."
objSelection.TypeParagraph()
i = i + 1

objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorWhite
objSelection.TypeText "This is the second paragraph."
objSelection.TypeParagraph()
i = i + 1

objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorYellow 
objSelection.TypeText "This is the third paragraph."
objSelection.TypeParagraph()
i = i + 1

objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorWhite

いかがでしょうか。このコードは上のスクリーンショットの半分ほども美しくありません。でも、このコードの動作について、何とか説明してみましょう。

まず、3 つの定数を作成しています。これらの定数はスクリプトで使用する背景色を表します。wdColorYellow が黄色を表し、その値が 65535 であることがどうしてわかったかというと、「Microsoft Word VBA Language Reference」(英語) で検索しただけです (WdColor 定数の値を参照してください)。

次に、Word.Application オブジェクトのインスタンスを作成し、Word のインスタンスを可視にします (Visible プロパティを True に設定します)。さらに、新しい文書を追加し、Selection オブジェクトのインスタンスを作成します。これだけの作業を行っても、操作の対象となる空白の Word 文書が作成されるだけです。とはいえ、この文書を作成すると、少しおもしろいことができます。

そのおもしろいことを始めるにあたり、カウンタ変数 i の値を 1 に設定します。なぜそのようなことをするのでしょうか。Word 文書の個々の段落に色を付けるためには、それらの段落を特定し、選択する必要があるからです。その簡単な方法の 1 つに、番号によって段落を示すことがあります (文書の最初の段落は段落 1、2 つ目の段落は段落 2、などとなります)。新しい段落を始めるたびに、i の値を 1 つ増やします。これによって、操作の対象とする段落を確実に特定することができます。

メモ   段落を特定する方法は他にもあります。上記の方法が好ましいと考えたのは、今日のコラムの目的 (段落の背景色を変更する) を達成できるだけでなく、段落を段落番号によって選択する (そして段落番号をカウンタ変数によって追跡する) という考え方を紹介できるからです。そのうえ、この方法に基づくスクリプトは正しく動作します。そして、この点こそ私たちが特に重視していることです。

次に、最初の段落を作成し、色付けします。これには次のコードを使用します。

objSelection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorGray10
objSelection.TypeText "This is the first paragraph."
objSelection.TypeParagraph()
i = i + 1

ここでは、ParagraphFormat オブジェクトの Shading.BackgroundPatternColor の値を wdColorGray10 に設定しています。wdColorGray10 は、もちろん冒頭で作成した定数の 1 つで、10% 灰色を表します。TypeText メソッドを使用して段落にテキストを入力した後、TypeParagraph() メソッドを使用してキャリッジ リターン/ラインフィードを追加し、段落 1 の終わりを示します (TypeParagraph() メソッドはキーボードの Enter キーを押す操作に相当します)。

段落 1 についてはこれで終わりです。i の値を 1 つ増やし (i の値は 2 となります)、段落 2 の設定を開始します。

objDoc.Paragraphs(i).Range.Select
objSelection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorWhite
objSelection.TypeText "This is the second paragraph."
objSelection.TypeParagraph()
i = i + 1

このコードと前のコードの大きな違いは (BackgroundPatternColor を白に設定していることは別として)、次の行です。

objDoc.Paragraphs(i).Range.Select

この行では、Selection オブジェクトの値を段落 2 を覆う範囲に設定しています。先ほど触れたとおり、i の値は 2 であるため、objDoc.Paragraphs(i).Range は "選択を段落 2 に設定せよ" と指示していることになります。段落 2 を選択したら、その背景色を変更し、テキストを入力して Enter キーを押します。そして、段落 3 の設定に進むことができます。

ところで、すべての段落を同じ背景色にする場合はどうでしょうか。その場合は、段落を選択して背景色を変更するというプロセスを繰り返す必要はありません。ご存じのことと思いますが、Word では Enter キーを押すと前の段落と同じ書式設定で次の段落が始まります (いくつか例外はあるものの、ほとんどの場合はそうなります)。この点は、スクリプトを使用して作成した Word 文書でも同じです。すべての段落の背景色を灰色にする場合は、最初に背景色を設定し、新しい段落を追加していけばよいのです。既定では、新しい段落には前の段落と同じ書式設定が適用されます。次のスクリプトを実行すると、その結果がわかります。

Const wdColorGray10 = 15132390

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

objSelection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorGray10
objSelection.TypeText "This is the first paragraph."
objSelection.TypeParagraph()

objSelection.TypeText "This is the second paragraph."
objSelection.TypeParagraph()

objSelection.TypeText "This is the third paragraph."
objSelection.TypeParagraph()