スライド番号付きの目次スライドを自動作成するPowerPointマクロをご紹介しています。
目次項目から該当スライドへ簡単にジャンプできるように、ハイパーリンク付きの目次を作成したいという要望も強くいただきます。
ハイパーリンク付き目次スライドを作成するサンプルマクロ
スライドが1枚選択された状態で以下のマクロを実行すると、そのスライドの前に新規スライドが挿入され、リンク付きの目次が自動的に作成されます。
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枚選択しておいてから実行してください。"
サンプルマクロで行っている処理
基本的な処理の流れは、ご紹介済みのアクティブスライドの前にスライド番号付き目次スライドを作成するマクロと同じで、最後にリンク関連の処理が追加されています。
スライド番号付きの目次作成マクロで、目次項目にする文字列を格納する処理
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マクロ