Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » SlideRangeはコレクションでFor Each~Nextでも処理できる

SlideRangeはコレクションでFor Each~Nextでも処理できる

対象:PowerPoint2010, PowerPoint2013, Windows版PowerPoint2016

最近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プロシージャを実行してみてください。

Sub SlideRangeオブジェクトを確認する()
 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を見比べると、同じようなプロパティ・メソッドを持っていることが確認できます。

PowerPoint.Slide

SlideRangeオブジェクトには、コレクションであることを示す、CountプロパティとItemメソッドが用意されていることも、

PowerPoint.SlideRange

もちろん確認できます。

Microsoft Office97 Visual Basicプログラマーズガイドの記述(9/30追記)

20年以上前に出たマイクロソフトの公式本『Microsoft Office97 Visual Basicプログラマーズガイド』p.135には、以下の記述もあります。

スライドを表すオブジェクトとして、Slidesコレクション、SlideRangeコレクション、Slideオブジェクトの3つがあります。...(中略)...SlideRangeコレクションは、プレゼンテーション内の一部のスライドを表します。

最終更新日時:2021-09-29 13:09

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » SlideRangeはコレクションでFor Each~Nextでも処理できる

「Slide・スライド」の記事一覧

検索


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

.