Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » PowerPointのタイトルプレースホルダーの文字列を取得するExcelマクロ

PowerPointのタイトルプレースホルダーの文字列を取得するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

「エクセル vba pptxのタイトルを読込む」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

「pptxのタイトル」
と表現されているものが、複数の解釈ができるためにいくつかの可能性が考えられます。

ですが私は、プレゼンテーションファイルから、各スライドのタイトルプレースホルダーの文字列を取得するExcelマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索かな、と想像しています。

例えば、PowerPointの提案資料から、更に詳細な資料をExcelで作るために、PowerPointファイルに書かれていることをExcelに一旦丸ごと持ってきたい、というニーズは十分考えられるからです。

PowerPointのスライドの枚数が少なければ、もちろんコピペで構いませんが、数十枚もスライドがあるときはとてもコピペをする気にはなれません。

そんなときに使えるExcelマクロをご紹介します。

[スポンサードリンク]

開いているプレゼンテーションファイルのタイトルプレースホルダーの文字列を取得するサンプルマクロ

PowerPointのプレゼンテーションファイルが開かれている状態で以下のExcelマクロを実行すると、アクティブなブックの先頭にワークシートが挿入され、2行目以下にスライド番号とタイトルプレースホルダーの文字列が出力されます。

Sub 開いているプレゼンテーションファイルのタイトルプレースホルダーの文字列を取得する()

 Dim pp_app As Object  'PowerPoint.Application
 Dim pp_prs As Object  'PowerPoint.Presentation
 Dim i As Long

 On Error GoTo ErrHndl

 Set pp_app = GetObject(Class:="PowerPoint.Application")
 Set pp_prs = pp_app.Presentations(1)

 Sheets.Add Before:=Sheets(1)
 Range("A1").Value = "スライド番号"
 Range("B1").Value = "タイトルプレースホルダーの文字列"

 For i = 1 To pp_prs.Slides.Count
 With pp_prs.Slides(i)
  Cells(i + 1, "A").Value = .SlideNumber
  With .Shapes
   If .HasTitle Then
    Cells(i + 1, "B").Value = _
      .Title.TextFrame.TextRange.Text
   End If
  End With
 End With
 Next i

 With Range("A1:B1")
  .Font.Bold = True
  .HorizontalAlignment = xlCenter
 End With
 Range("A1").CurrentRegion.EntireColumn.AutoFit

 GoTo EndTask

ErrHndl:

 Select Case Err.Number
  Case 429
    MsgBox "PowerPointが起動していません。"
  Case -2147188160
    MsgBox "PowerPointファイルが開かれていません。"
  Case Else
    MsgBox Err.Description & vbCrLf & Err.Number
 End Select
 Err.Clear

EndTask:

 Set pp_prs = Nothing
 Set pp_app = Nothing
 
End Sub

複数のプレゼンテーションファイルが開かれている状態で実行したときには、あくまでも一つ目のプレゼンテーションファイルから文字列を取得しますから、実務で利用する場合は、文字列を抜き出したいプレゼンテーションファイルだけを開いておいて実行するほうがいいでしょう。

サンプルマクロの解説

GetObject関数を使って、開いているPowerPointを変数・pp_appにセットして、
 Set pp_app = GetObject(Class:="PowerPoint.Application")
開いている一つ目のプレゼンテーションファイルを変数・pp_prsにセットします。
 Set pp_prs = pp_app.Presentations(1)

アクティブなブックの先頭にワークシートを挿入して、
 Sheets.Add Before:=Sheets(1)
1行目に見出しを作成します。
 Range("A1").Value = "スライド番号"
 Range("B1").Value = "タイトルプレースホルダーの文字列"

プレゼンテーションファイルのスライドの枚数だけFor~Nextループを回して、
 For i = 1 To pp_prs.Slides.Count

アクティブなワークシートのA列にスライド番号を出力して、
 With pp_prs.Slides(i)
  Cells(i + 1, "A").Value = .SlideNumber
タイトルプレースホルダーの存在するスライドだったときに、
  With .Shapes
   If .HasTitle Then
B列にタイトルプレースホルダーの文字列を出力しています。
    Cells(i + 1, "B").Value = _
      .Title.TextFrame.TextRange.Text

タイトルプレースホルダーの文字列を出力し終わったら、ワークシートの見た目を整えて終了です。
 With Range("A1:B1")
  .Font.Bold = True
  .HorizontalAlignment = xlCenter
 End With
 Range("A1").CurrentRegion.EntireColumn.AutoFit

PowerPointが起動していない場合や、プレゼンテーションファイルが開かれていない場合には実行時エラーが発生しますから、以下のようなエラートラップを行っています。
 Select Case Err.Number
  Case 429
    MsgBox "PowerPointが起動していません。"
  Case -2147188160
    MsgBox "PowerPointファイルが開かれていません。"
  Case Else
    MsgBox Err.Description & vbCrLf & Err.Number
 End Select
 Err.Clear

プレゼンテーションファイルのタイトルプレースホルダーの文字列を出力するPowerPointマクロ

「エクセル vba pptxのタイトルを読込む」
という検索をした方は、おそらくExcel VBAには慣れているけれど、PowerPoint VBAのオブジェクトモデルが理解できてらっしゃらないはずです。

上記のマクロのPowerPointに関わる部分が理解できない場合、まずは以下のようなPowerPointマクロを理解することをおすすめします。

Sub タイトルプレースホルダーの文字列を出力する()

 Dim pp_prs As Presentation
 Dim i As Long
 Dim msg As String  'イミディエイトウィンドウに出力する文字列

 Set pp_prs = Presentations(1)

 For i = 1 To pp_prs.Slides.Count
 With pp_prs.Slides(i)
  msg = .SlideNumber & vbTab
  With .Shapes
   If .HasTitle Then
    msg = msg & _
      .Title.TextFrame.TextRange.Text
   End If
  End With
  Debug.Print msg
 End With
 Next i

End Sub

先のExcelマクロから、Excel VBAに関する部分を取り除いたPowerPointマクロです。

実行するとイミディエイトウィンドウにスライド番号・タイトルプレースホルダーの文字列が出力されます。

これらのマクロで利用しているPowerPointのオブジェクトモデルの階層関係は下図のとおりです。

PowerPointのタイトルプレースホルダーの文字列を取得するExcelマクロ

自分でPowerPointのマクロを作れるようになりたいという場合、(Excel VBAよりもどうしても深くなりがちな)このようなオブジェクトモデルの階層関係を、しっかりと理解する必要があります。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » PowerPointのタイトルプレースホルダーの文字列を取得するExcelマクロ

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.