Office Space:Microsoft Office アプリケーションのスクリプト作成に関するヒントとテクニック

Office Space

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

*

Microsoft Word で複数段組みの文書を作成する

Scripting Guys がシステム管理スクリプトについて 1,300 ページの入門者用ブック (英語) を書いているという事実を考えると、私たちが環境について、そして樹木や他の天然資源の保護について気にかけているなどということは、信じ難いことに違いありません (実際気にかけてはいるのですが、結局は、スクリプトを 2 ページも書けば、いつの間にか 1,300 ページくらい書いてしまっているのです)。私たちは、ペーパーレス オフィスがすぐに実現すると信じるほど世間知らずではありませんが、可能な限り無駄なスペースそしてその延長としての無駄な紙の削減には賛成です。

良くも悪くも、Microsoft Word 文書は、必要以上に紙を使用することでよく知られています (これは Word が悪いのではなく、どのような種類のワープロ文書を作成するときでも、人はスペースを無駄にする傾向があるだけのことです)。たとえば、コンピュータにインストールされているすべてのフォントの名前を取得して、Word 文書にそのフォント名を書き出すスクリプトを次に示します。

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

Set objSelection = objWord.Selection

For Each strFont in objWord.FontNames
    objSelection.TypeText strFont
    objSelection.TypeParagraph()
Next

このスクリプトを実行すると、結果は次のようになります。

Microsoft Word


何か問題があるでしょうか。いいえ、ありません、このような文書を印刷しようとしたことを除けば。この場合、多くのスペースが無駄になっています。各ページにフォント名を 2 段組みで印刷するのに十分な余裕があります。2 段組みの文書でも結果はまったく同じですが、文書を印刷したときのページ数は半分で済みます。もっと大きな枠組みの中では、これは些細なことかもしれませんが、4 枚ではなく 2 枚の紙に印刷できるのであれば、なぜそうしないのですか。

疑わしく感じる気持ちはわかります。「それはすばらしいことです。私たちも紙の節約には賛成です。でも、このレポートはスクリプトを使用して作成したのですよ。スクリプトを使用して 2 段組みの書式にするにはどうすればいいのですか。」

では、1 つの例を示します。

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

objDoc.PageSetup.TextColumns.SetCount(2)
objDoc.PageSetup.TextColumns.LineBetween = True

Set objSelection = objWord.Selection

For Each strFont in objWord.FontNames
    objSelection.TypeText strFont
    objSelection.TypeParagraph()
Next

このスクリプトについて考えてみましょう。まず Word.Application オブジェクトのインスタンスを作成し、Visible プロパティを True に設定します。これにより、Word のインスタンスが用意されて、画面上に表示されます。その後、Add メソッドを使用して、新しい空白の文書を作成します。

Set objDoc = objWord.Documents.Add()

このとき、objDoc という名前のオブジェクト参照を作成していることに注意してください。このオブジェクト参照を使用すれば、この特定の文書に対して、ページ設定プロパティの構成など、あらゆる種類のおもしろいことを行うことができます。

これには、次の 2 行のコードを使用します。

objDoc.PageSetup.TextColumns.SetCount(2)
objDoc.PageSetup.TextColumns.LineBetween = True

最初の行では、SetCount メソッドを使用して、現在の文書の段組みの数を 2 に設定しています。文書の段組みを 3 にしたい場合はどうなるでしょうか。SetCount メソッドに渡す値を 3 にするだけです。

objDoc.PageSetup.TextColumns.SetCount(3)

この 1 行のコードが、本当に必要なもののすべてです。これで、複数段組みの文書を作成できます。ただし、だまされたと思って、LineBetween プロパティの値を True に設定してみます (既定では、LineBetween は False です)。段組みの間を分ける線が追加され、段組み 1 と段組み 2 を区別しやすくなります。

その後、スクリプトの残りの部分では、単純にフォント名を取得して、文書に印刷します。このコードについては今日は扱いません。詳細については、Word を使用したフォント情報の取得に関する以前の Office Space コラムをご覧ください。

変更したスクリプトを実行すると、文書は次のようになります。

Microsoft Word


各ページが 2 段組みになり、使用する紙が半分になります。世界中の木にとっては、歓迎すべきことです。

1 つ付け加えておく必要があるのは、印刷レイアウト表示または印刷プレビューでしか、2 段組みが 2 段組みとして表示されないということです。Word が下書きモードの場合は、文書は 2 段組みでも、表示では 1 段組みのようになります (下書きモードではそういうことになっています。印刷レイアウトに切り替えると、すべてが正しく表示されます)。したがって、おまけとして、文書が印刷レイアウト表示で表示されるようにスクリプトを変更しました。変更後のスクリプトは次のとおりです。

Const wdPrintView = 3

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

objDoc.PageSetup.TextColumns.SetCount(2)
objDoc.PageSetup.TextColumns.LineBetween = TRUE

Set objSelection = objWord.Selection

For Each strFont in objWord.FontNames
    objSelection.TypeText strFont
    objSelection.TypeParagraph()
Next

Set objView = objDoc.ActiveWindow.View
objView.Type = wdPrintView

修正内容は、新しい定数 wdPrintView を追加して値を 3 に設定したことだけです。そして、次の 2 行のコードをスクリプトの最後に追加しました。

Set objView = objDoc.ActiveWindow.View
objView.Type = wdPrintView

1 行目では現在の文書に対する View オブジェクトのインスタンスを作成し、2 行目では表示の Type を印刷レイアウトに設定しています。これで作業は完了です。別の表示が必要な場合は、以下の定数と値を使用して、Type プロパティを構成できます。

定数

wdMasterView

5

wdNormalView

1

wdOutlineView

2

wdPrintPreview

4

wdPrintView

3

wdReadingView

7

wdWebView

6

前に言ったように、ほんの数枚の紙が節約できるだけかもしれませんが、ちりも積もれば山となるです。Scripting Guys の場合は、これ以上仕事をしないと決意することで、紙の使用を劇的に節約できました。おかしなことに、だれにもその違いがわからないのですが...。


ページのトップへページのトップへ