ExcelVBAとPowerPointの連携パート1【PowerPointの起動とスライドの挿入】



The following two tabs change content below.
アバター

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

どうも、taka(@takabou63)です(^^♪

久しぶりのVBAネタですね(;^ω^)少しいろいろありましてブログ活動にまで手が回らないという状況となってしまいました・・・

さて、今回は少し気合が入っているネタです(笑)

【ExcelとPowerPoint】

今までAccess、Outlook、Wordと様々なOfficeソフトとExcelVBAで操作してきました、今回は【PowerPoint】です(^^♪

私はあまりPowerPointを使用した仕事をしていないので細かな使用はわかっておりませんが、一応基本的な操作関係は勉強しましたので問題ないはずです(^.^)

ではさっそく記念すべき1回目【PowerPointの起動とスライドの挿入】について解説していきます(^^♪

ExcelVBAとPowerPointの連携

さて、とうとうExcelVBAで操作できるOfficeソフトも最後となりましたPowerPoint!

今までAccess、Outlook、Wordと紹介してきましたが今回のPowerPointでOLEも最後となると思います(*_*;・・・ないですよね?

正直、PowerPointに詳しくない私としては、PowerPointをExcelVBAで操作したところでそこまで恩恵が受けられるのかナゾですが、せっかくOffice365にインストールされているので操作してみようかと思います(笑)

ExcelVBAでPowerPointを操作するための準備をしよう

まずはExcelVBAからPowerPointを起動するところから始めてみましょう(^^♪

参照設定を使用した場合のコードで紹介してきます。

参照設定する方法はこちらを参考にしてください。
PowerPointを参照設定する場合は【Microsoft PowerPoint ##.# Object Library】を探し出してください

参照設定とCreateObject関数の違いについてはこちら
VBA CreateObject関数と参照設定の違い

ExcelVBAからPowerPointを起動してみよう

ではさっそくExcelVBAからPowerPointを起動してみます。まずは簡単に短いコードから試してみましょう!

  1. オブジェクト変数を宣言
  2. インスタンスを作成
  3. PowerPointを表示
Sub Sample()

   Dim pwpApp  As PowerPoint.Application
   ' PowerPointのインスタンスを作成。
   Set pwpApp = New PowerPoint.Application
   'PowerPointを表示する
   pwpApp.Visible = True
  
    Set pwpApp = Nothing 'オブジェクトを開放
 

End Sub

PowerPointのアプリケーションが起動したはずです。

ExcelVBAからPowerPointのスライドを追加する!

起動したPowerPointは上記画像のようにスライドが表示されていない、ただ起動されただけの状態になっているはずです。このままではVBAでスライド操作したくても操作ができません(;^ω^)

まずはプレゼンテーションを作成するために【Presentations.Add】を使います、プレゼンテーションを作成するだけならこのままでもいいですが、このままだとスライドは追加されません。

なので【Presentations.Add】をオブジェクト変数にセットして、【Slides.Add メソッド】と一緒に使うことでスライドを追加するようにします。

Sub Sample()

   Dim pwpApp  As PowerPoint.Application
   Dim pradd As Object

   ' PowerPointのインスタンスを作成。
   Set pwpApp = New PowerPoint.Application
   'PowerPointを表示する
   pwpApp.Visible = True
   
   'PowerPointのプレゼンテーション作成する&スライドを追加するためにオブジェクト変数にセット
   Set pradd = pwpApp.Presentations.Add
    '新しいプレゼンテーションを作成して新しいスライドを作成する
    'Indexは挿入する位置を指定、Layoutはレイアウトを指定(ppLayoutTitleはスライドの見出し)
      pradd.Slides.Add Index:=1, Layout:=ppLayoutTitle

   Set pwpApp = Nothing 'オブジェクトを開放
 

End Sub

このようにタイトルスライドが追加されていると思います(^.^)

2ページ目以降もスライドを追加する

さて、上記で説明したようにタイトルスライドだけのスライドを作成してみてもあまり意味がありませんよね?

2ページ目以降もスライドは必要ですので、このページに続く「テキストレイアウト」を追加してみましょう!

ppLayoutText

ppLayoutText見本

下記のコードでは2ページ目以降には「ppLayoutText」というレイアウトを指定しています。

Sub Sample()

   Dim pwpApp  As PowerPoint.Application
   Dim pradd As Object
  Dim i As Long
   ' PowerPointのインスタンスを作成。
   Set pwpApp = New PowerPoint.Application
   'PowerPointを表示する
   pwpApp.Visible = True
   'PowerPointのプレゼンテーション作成する&スライドを追加するためにオブジェクト変数にセット
   Set pradd = pwpApp.Presentations.Add
    '新しいプレゼンテーションを作成して新しいスライドを作成する
    
  With pradd
   'ppLayoutTitleはスライドの見出し
   'ppLayoutTextはテキストとタイトル
        .Slides.Add Index:=1, Layout:=ppLayoutTitle
    For i = 2 To 4 '繰り返し処理を使用して任意の枚数を作成
        .Slides.Add Index:=i, Layout:=ppLayoutText
    Next
    
  End With
Set pwpApp = Nothing 'オブジェクトを開放
 
End Sub

ExcelVBAからPowerPointを保存・終了する

では最後にExcelからPowerPointを終了してみましょう。

PowerPointを保存するには「ActivePresentation.Save」などを使用しますが今回は名前を付けて保存する「ActivePresentation.SaveAs 」を使用しました。

また、理由がまだわかりませんが【保存の動作が安定しません】とりあえずWaitメソッドなどで2~3秒ほど待たないと保存ができないです(;^ω^)(待ってもできないときがある)

DoEvents関数を挟むと割と安定します。もし理由がわかりましたらコメントで教えてください(__)

最後にPowerPointを終了する 「pwpApp.Quit」というコードを追加すれば完成です!

Sub Sample()

   Dim pwpApp  As PowerPoint.Application
   Dim pradd As Object
   Dim i As Long
   ' PowerPointのインスタンスを作成。
   Set pwpApp = New PowerPoint.Application
   'PowerPointを表示する
   pwpApp.Visible = True
   'PowerPointのプレゼンテーション作成する&スライドを追加するためにオブジェクト変数にセット
   Set pradd = pwpApp.Presentations.Add
    '新しいプレゼンテーションを作成して新しいスライドを作成する
    
  With pradd
   'ppLayoutTitleはスライドの見出し
   'ppLayoutTextはテキストとタイトル
        .Slides.Add Index:=1, Layout:=ppLayoutTitle
    For i = 2 To 4 '繰り返し処理を使用して任意の枚数を作成
        .Slides.Add Index:=i, Layout:=ppLayoutText
        DoEvents
    Next
    
  End With
  'なぜか3秒ほど待たないと保存できないのでWaitメソッドを使用します
  Application.Wait Now() + TimeValue("00:00:02")
  '名前を付けて保存します。マイドキュメントに保存されます
 pwpApp.ActivePresentation.SaveAs Filename:="Sampleプレゼン"

 pwpApp.Quit
Set pwpApp = Nothing 'オブジェクトを開放
 

End Sub

 

フォロー・チャンネル登録お願いします

VBA以外についてのブログはこちら↓

https://yb-log.com/

■Twitterフォロー

■YouTubeチャンネル登録

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

WordPressでブログを始めるなら

WordPress簡単インストール&安心の安定性

レンタルサーバー Xserver