Word 文書からプレゼンテーションを作成する

Lisa Wollin
Microsoft Corporation

April 2001

対象 :
   Microsoft® PowerPoint® 2002、Microsoft Word Version 2002

概要 : この記事のソリューションを使って、Word を書式化され、すぐに表示できる PowerPoint プレゼンテーションに容易に変換できます。

注意    このソリューションのフォームとコード サンプルは、Microsoft Office 2000 Developer に収録の『Microsoft Office 2000 Visual Basic プログラマーズ ガイド』に含まれるサンプルのソリューションを変更したものです。

MSDN Online Code Center (英語) で、ODC_WordToPPT.exe サンプル コードを参照できます。

目次

はじめに
文書の準備
[Presentation Properties] ユーザー フォームの使用
Word から PowerPoint への変換
スライドの要素にアニメーション効果を設定
スライドショーの終了
まとめ

はじめに

以前に Word 文書を PowerPoint プレゼンテーションに変換した経験はありますか ? そのような場合、おそらく Word の [ファイル] メニューの [送信]-[Microsoft PowerPoint] を使用したのではないでしょうか。この機能を使用して、テンプレートの適用、箇条書き項目の書式設定、およびときには空白スライドの削除に多くの時間を費やした経験があります。この記事のソリューションを使って、プレゼンテーションの変換、書式設定、および準備に要する時間を節約できます。

このソリューションは、アウトライン ビューで書式化された Word 文書を受け取り、それを PowerPoint プレゼンテーション スライドショーとして表示します。ユーザーが開いている文書に対してこのソリューションを実行すると、コードはプレゼンテーションを作成し、テンプレートを割り当て、スライドショーを実行して、各スライドを指定した秒数表示します。これを実現するために、ユーザー フォーム (frmPresProps.frm) とカスタム コード モジュール (modRunPPtPresentation.bas) を使用し、Word 文書の内容を、すぐに表示できる PowerPoint プレゼンテーションに変換しています。ユーザー フォームとカスタム コード モジュールはサンプルをダウンロードして参照してください。

注意    ユーザー フォームとカスタム コード モジュールは、プレゼンテーションを作成する文書内部ではなく、グローバル テンプレートまたは標準テンプレートの内部に格納します。コードは一時文書を作成し、元の文書を再度開くためにその一時文書を閉じています。一時文書を閉じると、コードは使用できなくなり、実行が停止されます。

文書の準備

アウトライン ビュー モードを使用して文書をセットアップすることが重要です。Word で文書を用意するために、以下のことを行います。

  • [表示] メニューで [アウトライン] をクリックします。

  • 文書をアウトラインで表示した後、各スライドの先頭の見出しの書式を "見出し 1" に設定します。さらに各スライドの見出しの下に表示する箇条書き項目または段落の書式を "見出し 2"、"見出し 3" などに設定します。文書に実際の箇条書きを追加する必要はありません。PowerPoint がこれらを自動的にプレゼンテーションに追加します。

文書の書式を設定する方法の一例として、ダウンロードしたサンプルに含まれる PPTOutline.doc という名前の文書を参照してください。

文書が準備できたら、コード モジュールの ViewOutlineInPowerPoint マクロを実行できます。マクロが実行されると同時に、文書がアウトライン ビューかどうかを確認します。文書がアウトライン ビューでなければ、メッセージを受け取り、コードは実行を停止します。

[Presentation Properties] ユーザー フォーム

ViewOutlineInPowerPoint サブルーチンは [Presentation Properties] ユーザー フォームを表示します。このユーザー フォームから、プレゼンテーションに適用するテンプレートの選択と、各スライドを表示する秒数の指定を行います。さらに [Save resulting slide show] チェック ボックスを オンにして、コードが作成するスライドショー (.pps ファイル) を保存できます。このユーザー フォームを以下に示します。このユーザー フォームもダウンロードしたサンプルに含まれています。

図 1: [Presentation Properties] ダイアログ

ユーザー フォームを作成する場合、すべてのコントロールのプロパティは以下のプロパティを除いて既定値を使用します。

コントロール プロパティ
ユーザーフォーム (オブジェクト名)   frmPresProps
Caption   Presentation Properties
コンボ ボックス (オブジェクト名)   cmoTemplates
テキスト ボックス (オブジェクト名)   txtSeconds
Text   5
チェック ボックス (オブジェクト名)   chkSavePPT
Caption   Save resulting presentation
コマンド ボタン (オブジェクト名)   cmdView
Caption   View Presentation
コマンド ボタン (オブジェクト名)   cmdCancel
Caption   Cancel

ユーザー フォームの初期化時に、コードはユーザーの [Presentation Designs] フォルダにある PowerPoint テンプレートの一覧をコンボ ボックスに設定します。[Presentation Designs] フォルダのパスは定数で表されています。別の場所に .pot ファイルを格納している場合は、ユーザー フォームのコード モジュールの先頭にある PPT_TEMPLATE_PATH 定数でそのパスを指定する必要があります。

Word から PowerPoint への変換

Word のオブジェクト モデルは、文書から PowerPoint プレゼンテーションへの変換に使用できる PresentIt メソッドを提供しますが、ここではプレゼンテーションにテンプレートを適用し、各スライドの要素にアニメーション効果を設定し、その後画面にスライドショーを表示したいと考えています。PresentIt メソッドはこのような機能を行うことを許可していないので、Word が文書をプレゼンテーションに変換した後、PowerPoint の内部でこれらを手動で行う必要があります。そこで、この記事では PowerPoint 10.0 オブジェクト モデルに直接アクセスすることを選択しました。これを行うために、[ツール] メニューの [参照設定] を使って、 PowerPoint 10.0 オブジェクト モデルへの参照設定を追加する必要があります。

プレゼンテーションに適用するテンプレート デザインを選択後、コードは以下のいくつかの機能を実行します。

  • 元の文書を保存します。

  • 文書の一時的なコピーを保存します。

  • 一時的なコピーを閉じ、元の文書を再度開きます。

これらの機能を実行する前に、Word Application オブジェクトの ScreenUpdating プロパティを False に設定します。その結果、操作を実行中の画面の遷移が表示されません。操作が完了したときに、ScreenUpdating プロパティを True に戻します。

次にコードは GetRunningPPT というカスタム関数を呼び出します。GetRunningPPT 関数は、現在 PowerPoint が実行されているかどうかを調べます。実行されている場合は、この関数が PowerPoint アプリケーションへの参照を返します。PowerPoint が現在実行されていない場合は、関数は Nothing を返します。これは、コードが完了し、PowerPoint プレゼンテーションを閉じるときに、コードの開始時に PowerPoint が実行されていたときは PowerPoint を終了しないようにするためです。それ以外の場合は、スライドショーが終わるときに、コードが PowerPoint を終了します。

コードは PowerPoint アプリケーションへの参照を返した後、ほかの一連の機能を実行します。

  • 以前に保存した文書の一時的なコピーを PowerPoint で開きます。

  • 各スライドの要素にアニメーション効果を設定します。

  • [Presentation Properties] フォームでしたテンプレートとスライドのタイミング設定を適用します。

  • プレゼンテーションのスライドショーを表示します。

スライドの要素にアニメーション効果を設定

各スライドの要素にアニメーション効果を設定するには、PowerPoint Version 2002 で新しく導入された Effects オブジェクトを使用します。カスタム効果を作成し、それを各要素に適用することにより、各要素をアニメーションで動かすことができました。これを実現するために、プレゼンテーション内のスライドごとに For...Next ループを作成し、その内部でスライドの各要素ごとにネストした For...Next を作成しました。

次に、Sequence コレクションの AddEffect メソッドを使用してカスタム効果を指定しました。AddEffect メソッドは Shape オブジェクトを必要とするので、スライドの Shape オブジェクトごとに For...Next ループを作成し、その内部で Effect オブジェクトを作成しました。この結果、各スライドの各要素に同じアニメーションが適用されることになります。各要素に個別にカスタム アニメーションを追加したかのようにスライドショーにアニメーションを表示させるために、 AddEffect メソッドの EffectID パラメータに msoAnimEffectRandomEffects を指定しました。

最後に、開始しているアニメーションの終了時に、アニメーションで動くテキストの色が変更されるように後効果を追加しました。これを実現するために、要素ごとに AnimationSettings オブジェクトの AfterEffect プロパティに ppAfterEffectDim を設定しました。

スライドショーの終了

スライドショーが始まった後は、スライドショーが終了するまで、または中断されるまで監視できます。以下のコードはプレゼンテーション スライドショーが実行中であることを確認します。そして、実行中である限り任意のバックグラウンド関数の実行を許可します。以下のコード (PresentationView サブルーチンのコードに含まれています) により、スライドショーを完了前に終了することができます。スライドショーを中断するには、実行中のスライドショーを右クリックして終了するだけです。スライドショーを終了するために Esc キーを押すと、コードがエラーを生成することに注意してください。

  Do While objCurrentShow.State = ppSlideShowRunning
   DoEvents
Loop

注意    このコードがサブルーチン内に存在しないと、スライドショーは開いた直後に閉じられます。 DoEvents キーワードを使用して、スライドショーが完了してから、プレゼンテーションを閉じ、一時ファイルを削除し、アプリケーションを終了することができます。

最後に、スライドショーが終了するときに、コードは最終的な動作のセットを実行します。

  • スライドショーを元の文書と同じパスと名前で保存します (拡張子 .doc を削除して、拡張子 .pps を追加します)。

  • プレゼンテーションを保存しないで閉じます (以前にプレゼンテーションを保存することを選択していなかった場合は、戻り先のプレゼンテーション ファイルが存在しないことに注意してください)。

  • サブルーチンが開始されたときに PowerPoint が実行されていなかった場合は、 PowerPoint を終了します。

  • プレゼンテーションを作成するときに使用した文書の一時コピーを削除します。

まとめ

すべての見出しや箇条書きの再書式化を行わないで、文書をプレゼンテーションに変換できるようになりました。きっと、この結果節約できる時間とお金をすべて使って何かできるのではないでしょうか ?