もくじ

taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
どうも、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を起動してみます。まずは簡単に短いコードから試してみましょう!
- オブジェクト変数を宣言
- インスタンスを作成
- 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ページ目以降もスライドは必要ですので、このページに続く「テキストレイアウト」を追加してみましょう!
下記のコードでは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フォロー
Follow @taka_pc1027■YouTubeチャンネル登録