Hey, Scripting Guy!

Scripting Guys が皆さんの質問にお答えします

Hey, Scripting Guy!

TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

詳細情報

Hey, Scripting Guy! カテゴリ別アーカイブ

Hey, Scripting Guy! 日付別アーカイブ

Hey, Scripting Guy! ダウンロード

Spacer

*

新しいテンプレートを PowerPoint プレゼンテーションに適用する方法はありますか

Hey, Scripting Guy! Question

Scripting Guy さん、よろしくお願いします。私の会社では、最近、新しい PowerPoint テンプレートが作成され、このテンプレートをすべてのプレゼンテーションで使用しなければならないことになりました。この新しいテンプレートを C:\Presentations フォルダ内のすべてのプレゼンテーションに適用する方法はありますか。

-- OI

SpacerHey, Scripting Guy! AnswerScript Center

OI さん、こんにちは。今朝、このコラムを執筆している Scripting Guy は、いつもどおり平日の朝のルーチンワークをしました。つまり、給湯室にたたずんで、スターバックスの iCup コーヒー メーカーで “豆とカップだけを用意すれば望みどおりにできあがる” コーヒーが入れられるのを待っていました。

: この器具についてよく知らない方のために言っておくと、iCup は Interactive Cup Brewer (インタラクティブなドリンク メーカー) の略です。おそらく、インタラクティブでないコーヒー メーカーと区別するためにこういう名前にしたのでしょうね (インタラクティブでないコーヒー メーカーが好きな人なんていませんよね)。たいへん興味深いことに、このコラムを執筆している Scripting Guy が小学生のころ、iCup という言葉は、当時はとてもおもしろかった小学生ジョークの 1 つに使われていました。そのジョークというのは、「iCup の綴りを言ってみて」というものです (ご自分で綴りを言って確かめてみてください)。

考えてみると、今でもかなりおもしろいですよね。

ともかく、このコラムを執筆している Scripting Guy は、iCup でインタラクティブにコーヒーが入れられるのを待ちながら、掲示板に張り出された広告にしばらく目を通していました。彼の目がとまったのは、地元の飼い犬預かり施設の広告でした。彼がおもしろいと感じたのは、その施設が体重 (ポンド単位) で料金を設定している点です。たとえば、体重が 30 〜 49 ポンドの犬は 1 日 20 ドル、体重が 50 〜 79 ポンドの犬は 1 日 25 ドル、というふうに料金が設定されています。それはかまわないのですが、このコラムを執筆している Scripting Guy の頭には、「ホテルが客の体重 (ポンド単位) で料金を設定するようになったらどうしよう」という恐ろしい考えが浮かびました。彼が同僚の Scripting Guy である Jean Ross と 11 月にバルセロナに行く予定であることや、彼はその旅行でホテルに滞在する必要があることを考えると・・・。彼が、手にしていた 2 個目のドーナツをすぐに戻したのは言うまでもありません。

ええ、確かに、彼はまたそれを手に取ったのですが。しかし少なくとも、その発想によって、彼は少しだけ考える時間を持ちました。

: ご参考までに、昔、マイクロソフトでは、社員がコーヒーを飲みたくなると、給湯室に入り、カップをコーヒー沸かし器のコックの下に置き、ハンドルを引っ張ると、2 秒後に 1 杯のコーヒーができあがっていました。今は、給湯室に入り、カップを iCup に設定し、ボタンを押すと、60 秒後に 1 杯のコーヒーができあがります。

昔よりも少し時間がかかるようになりましたが、典型的なマイクロソフト社員のような人でない限り、気にならないでしょう。典型的なマイクロソフト社員は、55 秒後にカップを手に取ってしまいます。ええ、そんなことをしたら、コーヒーがカウンター一面に飛び散ってしまいますね。残念ながら、そのことにはだれも気付いていないようです。

飼い犬預かり施設に触発されて、このコラムを執筆している Scripting Guy は、今日のスクリプト (新しいテンプレートをフォルダ内のすべての PowerPoint プレゼンテーションに適用できるスクリプト) についても、重さ (ポンド単位) で料金を設定してみようかと思いました。しかし、今日のスクリプトの重さはほぼゼロです。というのも、この処理は、たった数行のコードで実現できるからです。ですから、今日のスクリプトは無料です。明日のスクリプトについては、まあ、結果を見守りましょう。

: 気にしないでください。編集者いわく、「いいえ、その必要はありません。明日のコラムは無料ですし、すべての Scripting Guy コラムは無料です」とのことです。

ええ、彼女はいつもこの調子なんです。多分、コーヒーの飲みすぎでしょう。

編集者注 : そうかもしれませんが、少なくとも彼女は、ホテルの料金が体重 (ポンド単位) で設定されるようになった場合について心配する必要がありません。ドーナツを 1 個食べた後でも、2 個食べた後でも同様です。

まずは、新しいテンプレートを 1 つの PowerPoint プレゼンテーションに適用するスクリプトをご紹介しましょう。このスクリプトのしくみについて説明してから、テンプレートをフォルダ内のすべてのプレゼンテーションに適用できるように変更したスクリプトをご紹介します。最初のスクリプトは次のとおりです。

Set objPPT = CreateObject("PowerPoint.Application") 
objPPT.Visible = True 
 
Set objPresentation = objPPT.Presentations.Open("C:\Presentations\Test.ppt") 
 
objPresentation.ApplyTemplate _ 
    ("C:\Program Files\Microsoft Office\Templates\Presentation Designs\Ocean.pot") 
 
objPresentation.Save 
 
objPPT.Quit

ご覧のとおり、まず、PowerPoint.Application オブジェクトのインスタンスを作成します。次に、Visible プロパティを True に設定します。これにより、この PowerPoint のインスタンスを画面に表示することができます。確かに、Visible プロパティを True に設定するのは無意味なことだと思われるかもしれません。すべてが計画どおりに進んだ場合、PowerPoint が画面に表示されるのはほんの一瞬ですからね (PowerPoint が表示されたら、テンプレートを変更し、ファイルを保存してアプリケーションを終了します)。しかし、どういうわけか、テンプレートを変更する際には PowerPoint が表示されている必要があるのです。表示されていない場合、スクリプトはクラッシュし、次のエラー メッセージが表示されます。

C:\Scripts\test.vbs(4, 1) Microsoft Office PowerPoint 2003: Presentations.Open :  
無効な要求です。PowerPoint のフレーム ウィンドウは存在しません。

さいわい、Visible プロパティを True に設定することによって、この問題に対処できます。

PowerPoint が起動したら、次のように、Open メソッドを呼び出してファイル C:\Presentations\Test.ppt を開きます。

Set objPresentation = objPPT.Presentations.Open("C:\Presentations\Test.ppt")

知りたくてうずうずしている方のためにお見せすると、このプレゼンテーションの 1 枚目のスライドの外観は次のようなものです。

Spacer


もちろん、このような外観にしたいわけではなく、別のテンプレートをプレゼンテーションに適用する必要があります。これを行うのが次のコード行です。

objPresentation.ApplyTemplate _ 
    ("C:\Program Files\Microsoft Office\Templates\Presentation Designs\Ocean.pot")

ご覧のとおり、必要なのは、テンプレート ファイルの完全なファイル パスを唯一のパラメータとして渡して ApplyTemplate メソッドを呼び出すという処理だけです。では、ApplyTemplate メソッドを実行したことによって別のテンプレートが適用されると、1 枚目のスライドは次のような外観になります。

Spacer

どうですか。悪くないでしょう。

その後は、Save メソッドを呼び出して変更したプレゼンテーションを保存し、Quit メソッドを呼び出して PowerPoint のインスタンスを終了します。これで、必要な処理は完了しました。

失礼しました。この同じテンプレートをフォルダ内のすべてのプレゼンテーションに適用するという処理が必要でなかった場合に必要な処理は完了しました、と言うべきでした。詳細については説明しませんが、まさにその処理を行うスクリプトを以下に示します。このスクリプトでは、Ocean.pot テンプレートを C:\Presentations フォルダ内のすべての PPT ファイルに適用するという処理を行っています。

strComputer = "." 
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
 
Set colFileList = objWMIService.ExecQuery _ 
    ("ASSOCIATORS OF {Win32_Directory.Name='C:\Presentations'} Where " _ 
        & "ResultClass = CIM_DataFile") 
 
Set objPPT = CreateObject("PowerPoint.Application") 
objPPT.Visible = true 
 
For Each objFile In colFileList 
    If objFile.Extension = "ppt" Then 
        Set objPresentation = objPPT.Presentations.Open(objFile.Name) 
            objPresentation.ApplyTemplate _ 
                ("C:\Program Files\Microsoft Office\Templates\Presentation Designs\Ocean.pot") 
        objPresentation.Save 
        objPresentation.Close 
    End If 
Next 
 
objPPT.Quit

今度こそ、必要な処理は完了しました。

ちなみに、バルセロナの飼い犬預かり施設でお勧めの所をご存じの方がいらっしゃれば、ご一報ください。確かに、展示会に出席する場合、ホテルに滞在する方が一般的です。ですが、フィラデルフィアにある Mazzu's Canine & Feline Luxury Hotel (Mazzu の犬・猫向け高級ホテル) の下記の説明をご覧ください。

プライベート スイート、プラットフォーム ベッド、掛け布団、おもちゃ、TV、DVD、散歩 2 回、ドッグ パークへの 40 分間のお出かけ、食事、ミネラル ウォーター飲み放題、冷暖房完備の施設、毎日の掃除サービス、施設での 24 時間の世話

さらに、たった 25 ドルの追加料金を支払うだけで、食事としてフィレ ミニヨン (ひれ肉を厚く切った小さめのステーキ) を部屋まで届けてくれるのです。これは、人間向けホテルよりもはるかにすてきなサービスです。

少なくとも、マイクロソフトが支払いをいとわない程度の料金で宿泊できる人間向けホテルよりは。


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