「エクセル vba pptxのタイトルを読込む」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
「pptxのタイトル」
と表現されているものが、複数の解釈ができるためにいくつかの可能性が考えられます。
ですが私は、プレゼンテーションファイルから、各スライドのタイトルプレースホルダーの文字列を取得するExcelマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索かな、と想像しています。
例えば、PowerPointの提案資料から、更に詳細な資料をExcelで作るために、PowerPointファイルに書かれていることをExcelに一旦丸ごと持ってきたい、というニーズは十分考えられるからです。
PowerPointのスライドの枚数が少なければ、もちろんコピペで構いませんが、数十枚もスライドがあるときはとてもコピペをする気にはなれません。
そんなときに使えるExcelマクロをご紹介します。
開いているプレゼンテーションファイルのタイトルプレースホルダーの文字列を取得するサンプルマクロ
PowerPointのプレゼンテーションファイルが開かれている状態で以下のExcelマクロを実行すると、アクティブなブックの先頭にワークシートが挿入され、2行目以下にスライド番号とタイトルプレースホルダーの文字列が出力されます。
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 = NothingSet 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マクロを理解することをおすすめします。
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
先のExcelマクロから、Excel VBAに関する部分を取り除いたPowerPointマクロです。
実行するとイミディエイトウィンドウにスライド番号・タイトルプレースホルダーの文字列が出力されます。
これらのマクロで利用しているPowerPointのオブジェクトモデルの階層関係は下図のとおりです。
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » PowerPointのタイトルプレースホルダーの文字列を取得するExcelマクロ