最近PowerPoint VBA関連記事を連載してらっしゃる『いつも隣にITのお仕事』さんで、誤解していると思われる箇所に気付きましたので、指摘させていただきます。
PowerPointのSlideRangeオブジェクトについてです。
「PowerPoint VBAで選択しているスライドのフォントを変更するマクロの作り方」の中で、以下のような記述があります。
SlideRangeオブジェクトにはSlidesコレクションを取得するようなプロパティはありませんので、For Each文ではなくFor文でループを構成します。
また以下のような構造のコードも公開されています。
With ActiveWindow.Selection
If .Type >= ppSelectionSlides Then
Dim i As Long
For i = 1 To .SlideRange.Count
Dim shp As Shape
For Each shp In .SlideRange(i).Shapes
' (中略)
End With
Next shp
Next i
End If
End With
SlideRangeオブジェクトが、コレクションではないと誤解なさっているようです。
SlideRangeはFor Each~Nextループで処理できる
SlideRangeオブジェクトはFor Each~Nextループで処理できます。
アクティブなプレゼンテーションで複数のスライドを選択しておいてから、以下のSubプロシージャを実行してみてください。
With ActiveWindow.Selection
If .Type = ppSelectionNone Then Exit Sub
Dim sld As Slide
For Each sld In .SlideRange
MsgBox sld.SlideNumber
Next sld
End With
End Sub
SlideRangeはSlideオブジェクトを単独オブジェクトとして持つコレクション
拙著『いちばんやさしいExcel VBAの教本』のLesson 53「コレクションオブジェクトについて学習しましょう」で、
コレクションオブジェクトと、その中に含まれる単独のオブジェクトには、多くの場合、まったく別のプロパティやメソッドが用意されています。
と書きました。
PowerPointでもこのルールは基本的に当てはまります。PresentationsコレクションとPresentationオブジェクトが、その代表です。
今回誤解なさったSlideRangeオブジェクトは、このルールから外れているために、誤解なさったのでしょうか。
SlideRangeは、要素であるSlideオブジェクトと、同じようなプロパティ・メソッドを持っているコレクションです。
オブジェクトブラウザーで確認しましょう
オブジェクトブラウザーで、SlideRangeとSlideを見比べると、同じようなプロパティ・メソッドを持っていることが確認できます。
SlideRangeオブジェクトには、コレクションであることを示す、CountプロパティとItemメソッドが用意されていることも、
もちろん確認できます。
Microsoft Office97 Visual Basicプログラマーズガイドの記述(9/30追記)
20年以上前に出たマイクロソフトの公式本『Microsoft Office97 Visual Basicプログラマーズガイド』p.135には、以下の記述もあります。
スライドを表すオブジェクトとして、Slidesコレクション、SlideRangeコレクション、Slideオブジェクトの3つがあります。...(中略)...SlideRangeコレクションは、プレゼンテーション内の一部のスライドを表します。
最終更新日時:2021-09-29 13:09
- Newer:_NewEnumプロパティがない?
- Older:条件付き書式で2番目に小さいデータを目立たせる-SMALL関数
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » SlideRangeはコレクションでFor Each~Nextでも処理できる