Office関連

指定したスライドにユーザー設定レイアウトを適用するPowerPointマクロ

PowerPointにはオリジナルのレイアウト(ユーザー設定レイアウト)を作成する機能が用意されています(下記サイト参照)。

オブジェクトとしてもCustomLayoutsコレクション、CustomLayoutオブジェクトが用意されているので、ユーザー設定レイアウトをマクロから取り扱うことができます。

今回は、指定したスライドにユーザー設定レイアウトを適用する簡単なマクロを紹介します。

名前指定できないユーザー設定レイアウト

ユーザー設定レイアウトを指定するのは簡単で、SlideオブジェクトのCustomLayoutプロパティを変更するだけです。

ActivePresentation.Slides(1).CustomLayout = (CustomLayoutオブジェクト)

ただし、CustomLayoutオブジェクトの取得には少々クセがあります。
CustomLayoutオブジェクトは、CustomLayoutsコレクションのItemメソッド(既定メンバーなので省略可能)によって取得できるのですが、引数がVariant型になっていて、説明文に“コレクションから取得する 1 つのオブジェクトの名前またはインデックス番号を指定します”とあるにも関わらず、実際には、ユーザー設定レイアウト名で取得しようとすると、下記のように実行時エラーが発生し、インデックス番号でしか取得できないようになっています。

Public Sub Test()
  Dim myCustomLayout As PowerPoint.CustomLayout
  
  Set myCustomLayout = ActivePresentation.SlideMaster.CustomLayouts.Item("白紙") '実行時エラー
  'Set myCustomLayout = ActivePresentation.SlideMaster.CustomLayouts.Item("Blank") '実行時エラー
  'Set myCustomLayout = ActivePresentation.SlideMaster.CustomLayouts.Item(8) '問題なし
  Stop
End Sub

実行時エラー ‘-2147024809 (80070057)’:

CustomLayouts (不明なメンバー) : 引数の種類が正しくありません。コレクション インデックス (文字列または整数)が必要です。

指定したスライドにユーザー設定レイアウトを適用する

そこで、一手間掛かってしまうのですが、ユーザー設定レイアウト名からインデックスを取得する自作関数を間に挟むことで、CustomLayoutオブジェクトを取得するようにします。

Public Sub Sample()
'指定したスライドにユーザー設定レイアウトを適用する
'※下記コードでは「和風レイアウト」という名前のユーザー設定レイアウトを適用
  Dim mySlideMaster As PowerPoint.Master
  Dim myCustomLayout As PowerPoint.CustomLayout
  Dim idx As Long
  
  Set mySlideMaster = ActivePresentation.SlideMaster
  idx = GetCustomLayoutsIndex(mySlideMaster, "和風レイアウト")
  If idx <> 0 Then
    Set myCustomLayout = mySlideMaster.CustomLayouts(idx)
    ActivePresentation.Slides(1).CustomLayout = myCustomLayout
  End If
End Sub

Private Function GetCustomLayoutsIndex(ByVal TargetSlideMaster As PowerPoint.Master, _
                                       ByVal CustomLayoutName As String) As Long
'ユーザー設定レイアウト名からインデックスを取得する
  Dim cl As PowerPoint.CustomLayout
  Dim ret As Long
  
  ret = 0 '初期化
  For Each cl In TargetSlideMaster.CustomLayouts
    If cl.Name = CustomLayoutName Then
      ret = cl.Index
      Exit For
    End If
  Next
  GetCustomLayoutsIndex = ret
End Function

以上のようなコードで、マクロから指定したスライドにユーザー設定レイアウトを適用できるわけですが、「白紙」のように標準で用意されているレイアウトを適用する場合には、下記のようにSlideオブジェクトのLayoutプロパティを指定(PpSlideLayout列挙)した方が簡潔になります。

Public Sub Sample2()
  ActivePresentation.Slides(1).Layout = ppLayoutBlank
End Sub

参考Webサイト

[Google Apps Script]スプレッドシートのセル範囲に指定した値が含まれているかを判定する前のページ

Re: 【GAS】指定行の最終列番号・指定列の最終行番号を取得する次のページ

関連記事

  1. Office関連

    「入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術」レビュー

    久しぶりにVBA参考書籍のレビューです。今回は沢内晴彦氏が執筆され…

  2. Office関連

    PowerPointの自動実行マクロ

    ExcelのAuto_OpenやWordのAutoOpenのように、P…

  3. Office関連

    [Office VBA]リボンのカスタマイズ環境の紹介

    Office開発に携われている方ならご存じの方も多いと思いますが、Of…

  4. Office アドイン

    [Officeアドイン]枠線(目盛線)の表示・非表示を切り替える方法

    ここ二週間ほど体調を崩していたので久しぶりのブログ更新です。久…

  5. Office関連

    ちゃうちゃう! 2.0を操作するWordマクロ

    「テキスト比較ソフト「ちゃうちゃう!」がバージョンアップされました。」…

  6. Office関連

    PDFを他のファイル形式に変換するVBAマクロ

    「PDF 変換 Word VBA」といったキーワード検索でのアクセスが…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP