下記の質問をいただきました。
>パワーポイントのVBAを検索していたらこちらに辿り着きました。
>A列~E列までのデータを1枚のスライドの5か所のテキストボックスに流し込むにはどうしたら
>いいでしょうか?
>テキストボックスは上から下へ同じ大きさのテキストボックスが5行あるような状態です。
いつもの、あのあの、そのその?が多すぎなテスト動画です
https://www.youtube.com/watch?v=ZLkCiXC0FzQ
www.youtube.com
1.事前準備
PowerPoint を新規で開き、5つのテキストボックスを作成します。
ホーム → 配置 → オブジェクトの選択と表示
を使い、オブジェクトの名前を設定します。
ここでは、
txtA
txtB
txtC
txtD
txtE
としました。
テンプレ000.pptxと名前を付け保存します。
テンプレートファイルを一つ作ります
※※作成したコードを実行させてから、細かい説明をする。
2.ExcelからPowerPointへデータを流し込む
2.1 Excelからテンプレ000.pptxを開く
2.2 別名を付け、20210725.pptx など、保存する。
※途中で止まった時に(トラブった時に)テンプレートを壊したくないので、
頭で別名保存する
2.3 Excelの行数分 テンプレのスライドをコピーする
2.4 Excel 1行(A列~E列) を
PowerPoint 1スライド 5つのテキストボックス(タテに並べたテンプレート)
データをセットする
だいぶまえ、前回のソース https://ken3memo.hatenablog.com/entry/2019/11/01/110000 参考にして
Option Explicit 'A列~E列(A2二行目から)にセットされたデータを使用して、 '1行1スライド テキストボックス五ヶ所にデータセット スライドを作成する '事前に作られたPowerPointのテンプレート的なスライドをコピーし作成する Sub PowerPointテンプレ開きテキストボックスにセットする() Dim oApp As Object 'PowerPoint.Applicationを作成して入れる 'PowerPoint の 起動、インターフェース用のオブジェクトを作る Set oApp = CreateObject("PowerPoint.Application") oApp.Visible = True '可視にする '2.ExcelからPowerPointへデータを流し込む '2.1 Excelからテンプレ.pptxを開く Const strOpenFileName = "D:\2021\テンプレ000.pptx" '元のテンプレートファイル名 Dim strSaveFileName As String '保存ファイル名をD:2021\日付.pptで作成する '1.元ファイルを開く テンプレートファイルを開く oApp.Presentations.Open strOpenFileName '↑単純に、.Open "ファイル名" で開いただけです ファイルなしのエラーをチェックしろよコラ!! '2.2 別名を付け、202107250102.pptx などで、保存する。 '※途中で止まった時に(トラブった時に)テンプレートを壊したくないので、 '頭で別名保存する '保存場所とファイル名yyyymmddhhnn.pptxを作る 年月日時分.pptx strSaveFileName = "d:\2021\" & Format(Now(), "yyyymmddhhnn") & ".pptx" '単純に.SaveAs "ファイル名" で 保存する oApp.ActivePresentation.SaveAs strSaveFileName '2.3 Excelの行数分 テンプレのスライドをコピーする Dim n As Integer Dim strWORK As String For n = 3 To 99 'A3からデータ有無をチェックしてスライドを複製する 'A列のデータ存在チェック strWORK = Trim("" & Cells(n, "A").Text) 'A列のデータを取り出し、左右の空白をカット If Len(strWORK) = 0 Then Exit For '文字列の長さが0 データ無しならループ処理を抜ける 'テンプレートスライドを増やす oApp.ActivePresentation.Slides(1).Copy '1ページ目をコピー oApp.ActivePresentation.Slides.Paste 1 '1ページ目に貼り付け Next n '2.4 Excel 1行(A列~E列) を ' PowerPoint 1スライド 5つのテキストボックス(タテに並べたテンプレート) ' データをセットする 'ここからスライドをA列のデータがなくなるまで、追加する Dim nPAGE As Integer 'セットするスライドページ Dim objSlide As Object 'スライド For n = 2 To 99 'A2からデータ有無をチェックしてスライドにデータをセットする 'A列のデータ存在チェック strWORK = Trim("" & Cells(n, "A").Text) 'A列のデータを取り出し、左右の空白をカット If Len(strWORK) = 0 Then Exit For '文字列の長さが0 データ無しならループ処理を抜ける 'Excel A列からE列のデータをスライドにセットする nPAGE = n - 1 'Excel1行目が見出しなので、-1する。※だったらn-1をそのまま使ってもいいのにね Set objSlide = oApp.ActivePresentation.Slides(nPAGE) 'スライドオブジェクト 'スライドの下にぶらさがっている、名前の付いたテキストボックスにデータセット objSlide.Shapes("txtA").TextFrame.TextRange.Text = Cells(n, "A").Text 'A列 objSlide.Shapes("txtB").TextFrame.TextRange.Text = Cells(n, "B").Text objSlide.Shapes("txtC").TextFrame.TextRange.Text = Cells(n, "C").Text objSlide.Shapes("txtD").TextFrame.TextRange.Text = Cells(n, "D").Text objSlide.Shapes("txtE").TextFrame.TextRange.Text = Cells(n, "E").Text '↑単純に代入しただけです。ぉぃぉぃ。ループで回せよ?? Next n '.Saveで保存 oApp.ActivePresentation.Save 'アプリを開きっぱなしで、ぎょうぎ悪く終わる。 'oApp.Quit '.QuitでoAppのPowerPoint終了 MsgBox "PowerPointのスライドを作成しました、確認してください" '↑んっ?コードよりも、コメント行の方が行数多い? 'たいした量のコードを書かないでも、こんなことできるんだ '※だって、テンプレファイル無しのエラー入ってないし、 'txtAの名前が付いたテキストボックスが無かったときのエラー処理が入ってないじゃん 'お金を取るプログラムなら、エラー処理入れろよ 'と、読者の心の声が聞こえてきたので、このあたりで失礼します End Sub
テストで作成してみました、処理の参考となれば幸いです。
Excel VBA 1行単位 A列からE列 5つのデータをPowerPointの1スライド 縦に5個並べたテキストボックスにセットする。 Excel 1行 を PowerPoint 1スライドで作成
https://www.youtube.com/watch?v=ZLkCiXC0FzQ
↑コードを修正しながら、遊んでみてください。
事前準備と単体テストの動画※下記3つの単体テストを先にやってました。合わせてみてください。
1.PowerPoint テキストボックスに名前を付ける VBAから値をセットしたかったのでオブジェクトに名前を手作業で付け セット処理を確認してみる
https://www.youtube.com/watch?v=1nKrP4nhqHE
2.PowerPoint VBA ファイルを開き 別名で保存してみる
https://www.youtube.com/watch?v=df4XyOdKdIk
3.PowerPoint VBA スライドをコピー 貼り付け スライドの複製を作成する
https://www.youtube.com/watch?v=PSEB-A5wIPw
2022/03/28 追記
とコメントが来たので、パワポのテキスト取得にチャレンジしてみたいと思います。
ken3memo.hatenablog.com