PowerPointで作成された資料に入力されている文字列を、Wordなど他のアプリケーションで作成する資料でも流用したい、ということが実務ではあります。
流用したい文字列が少なければコピーと貼り付けを繰り返せば済みますが、たくさんの文字列を流用したい場合には、コピペの繰り返しが面倒になります。
そのためのマクロを作成しましたのでご紹介しておきます。
アクティブなスライドの、プレースホルダ・テキストボックス・オートシェイプに入力されている文字列を取得するためのマクロです。
Sub アクティブなスライドの文字列を出力する()
'アクティブなスライドの文字列を
'クリップボードとイミディエイトウィンドウに出力する
'Microsoft Forms 2.0 Object Libraryへの参照設定が必要
Dim shp As Shape
Dim buf As String
Dim obj As New DataObject
buf = ""
With ActiveWindow.Selection.SlideRange
For Each shp In .Shapes
'文字列を変数に格納
'垂直タブはvbCrLfに置換
buf = buf & _
Replace(shp.TextFrame.TextRange.Text, Chr(11), vbCrLf) & vbCrLf
Next shp
End With
'クリップボードに出力
With obj
.SetText buf
.PutInClipboard
End With
'イミディエイトウィンドウに出力
Debug.Print buf
上記のマクロを実行すると、クリップボードとイミディエイトウィンドウにアクティブスライドの文字列が出力されます。
例えば、文字列をWordで流用したいのなら、上記のマクロを実行してから、[Ctrl]+[V]キーを押せばアクティブなスライドの文字列がWord文書に貼り付けられます。
ループ文の中でShapeオブジェクトをなめていき、
For Each shp In .Shapes
buf = buf & _
Replace(shp.TextFrame.TextRange.Text, Chr(11), vbCrLf) & vbCrLf
Next shp
入力されている文字列を変数「buf」に格納しておいてあとからクリップボードとイミディエイトウィンドウに出力しています。
変数に格納するときに、[Shift]+[Enter]キーで設定された改行(垂直タブ)をvbCrLfに置換しています。
注意点は、「Microsoft Forms 2.0 Object Library」への参照設定が必要なことです。参照設定はVBE(Visual Basic Editor)のメニュー[ツール]-[参照設定]から表示される[参照設定]ダイアログで設定するのが教科書的操作ですが、Microsoft Forms 2.0 Object Libraryの場合はフォームモジュールを挿入してやるのが簡単です。
一旦フォームを挿入してやればMicrosoft Forms 2.0 Object Libraryへの参照設定が自動的にできますので、その後挿入したフォームを削除してやるといいでしょう。
プレースホルダ・テキストボックス・オートシェイプ以外のオブジェクトがある場合、上記のマクロを実行するとエラーとなる可能性がありますので、その場合は「On Error Resume Next」するなどしてください。
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » アクティブスライド上のすべての文字列を取得するPowerPointマクロ