Home » パワーポイントマクロ・PowerPoint VBAの使い方 » プレースホルダー » ハイパーリンク付きの目次を自動作成するPowerPointマクロ

ハイパーリンク付きの目次を自動作成するPowerPointマクロ

動作検証バージョン:64bit Windows 10 Pro + 32bit PowerPoint(バージョン2002 ビルド12527.20278 Microsoft Store)

スライド番号付きの目次スライドを自動作成するPowerPointマクロをご紹介しています。

目次項目から該当スライドへ簡単にジャンプできるように、ハイパーリンク付きの目次を作成したいという要望も強くいただきます。

[スポンサードリンク]

ハイパーリンク付き目次スライドを作成するサンプルマクロ

スライドが1枚選択された状態で以下のマクロを実行すると、そのスライドの前に新規スライドが挿入され、リンク付きの目次が自動的に作成されます。

Sub アクティブスライドの前に目次スライドを作成する_ハイパーリンクあり()
On Error GoTo ErrHandl

 Dim active_idx As Long
 active_idx = ActiveWindow.Selection.SlideRange.SlideIndex
 
 With ActivePresentation.Slides
  Dim target_slide As Slide
  Set target_slide = .Add(Index:=active_idx, Layout:=ppLayoutText)
  target_slide.Shapes.Title.TextFrame.TextRange.Text = "目次"
 
  Dim i As Long
  For i = active_idx + 1 To .Count ' アクティブスライド以降のみを目次に
   Dim txt As String
   With .Item(i)
    If .Shapes.HasTitle Then
     txt = .Shapes.Title.TextFrame.TextRange.Text
     If Trim(txt) = "" Then
      txt = "(タイトルなし)"
     End If
    Else
     txt = "(タイトルなし)"
    End If
    txt = txt & vbTab & .SlideNumber & vbNewLine

    Dim trng As TextRange
    Set trng = target_slide.Shapes.Placeholders(2).TextFrame _
      .TextRange.InsertAfter(NewText:=txt)
    trng.ActionSettings(ppMouseClick).Hyperlink.SubAddress _
      = .SlideID & "," & .SlideIndex & "," & txt

   End With '.Item(i)
  Next i

 End With 'ActivePresentation.Slides

Exit Sub
ErrHandl:
 MsgBox "スライドを1枚選択しておいてから実行してください。"

End Sub

サンプルマクロで行っている処理

基本的な処理の流れは、ご紹介済みのアクティブスライドの前にスライド番号付き目次スライドを作成するマクロと同じで、最後にリンク関連の処理が追加されています。

スライド番号付きの目次作成マクロで、目次項目にする文字列を格納する処理
    txt = txt & vbTab & .SlideNumber & vbNewLine
が終わった後が異なります。

目次項目を作成しリンクを設定する

目次項目を設定する処理自体は同じなのですが、リンクを設定するためにTextRange.InsertAfterメソッドの戻り値をオブジェクト変数trngに代入しています。
    Dim trng As TextRange
    Set trng = target_slide.Shapes.Placeholders(2).TextFrame _
      .TextRange.InsertAfter(NewText:=txt)
TextRange.InsertAfterメソッドは、追加された文字列のみを表すTextRangeオブジェクトを返します。

拙著『いちばんやさしいPowerPoint VBAの教本』でも繰り返しお伝えしているとおり、TextRange.InsertAfterメソッドの戻り値をオブジェクト変数に代入するという形で使っているので、引数NewText:=txtをカッコで括る必要があります。

そのオブジェクト変数trngを使って、各スライドへのハイパーリンクを設定しています。
    trng.ActionSettings(ppMouseClick).Hyperlink.SubAddress _
      = .SlideID & "," & .SlideIndex & "," & txt

TextRangeオブジェクトに用意されているActionSettingsプロパティでActionSettingsコレクションを取得して、

ActionSettingsコレクションの既定メンバーであるItemメソッドに、

PpMouseActivation列挙に定義されている定数ppMouseClickを指定して、

クリック時の動作を設定するActionSettingオブジェクトを取得し、

ActionSettingオブジェクトのHyperlinkプロパティでHyperlinkオブジェクトを取得して、ハイパーリンクを設定しています。

Hyperlink.ScreenTipを設定するには?

バージョン2003までの場合、この直後にScreenTipを設定できたのですけれど、

最近のバージョンで同様の処理を入れていたときに、
「Hyperlink(不明なメンバー)無効な要求です。この種類のオブジェクトは、ハイパーリンクを設定できません。」
実行時エラーが発生するようになってしまっています。

Hyperlink.ScreenTipを設定したい場合、ハイパーリンク付きの目次作成がすべて終わってから、上記のSubプロシージャの「Exit Sub」の前に、以下のような処理を別途追加すると、ScreenTipを設定できます。
  Dim lnk As Hyperlink
  For Each lnk In target_slide.Hyperlinks
   lnk.ScreenTip = Replace(lnk.TextToDisplay, vbTab, " ")
  Next lnk

※この記事は、2007年04月03日にオリジナルを公開し、2020年04月06日に全面的に書き直しました。

最終更新日時:2020-04-06 09:59

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » プレースホルダー » ハイパーリンク付きの目次を自動作成するPowerPointマクロ

「プレースホルダー」の記事一覧

検索


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

.