Home » いちばんやさしいPowerPoint VBAの教本 » コレクションであることをFor Each~Nextで確認しましょう

コレクションであることをFor Each~Nextで確認しましょう

『いちばんやさしいPowerPoint VBAの教本』P.096より

拙著『いちばんやさしいPowerPoint VBAの教本』P.096のワンポイントで、オブジェクトがコレクションであるかどうかを判断するには、For Each~Next文で処理可能なことを確認する必要があると書きました。

その具体例を紹介しておきます。

オブジェクトがコレクションであることを確認するSubプロシージャ

まずは以下のSubプロシージャでは、実行時エラーが発生することを確認してください。

Sub 取得したオブジェクトがコレクションであるかを確認する()
 Dim itm As Variant
 For Each itm In ActivePresentation
 Next
End Sub

変数宣言の次の行
  For Each itm In ActivePresentation
の部分で、
「実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
エラーが発生します。

ActivePresentationプロパティの戻り値Presentationオブジェクトが、コレクションではないにもかかわらずFor Each~Next文で処理しようとしたために、実行時エラーが発生したのです。

PresentationsならばFor Each~Next文で処理できる

つづいて
  For Each itm In ActivePresentation
の行を、
  For Each itm In Presentations

に変更してから、ステップ実行してみてください。

今度は、実行時エラーにはなりません。
Presentationsプロパティの戻り値Presentationsオブジェクトは、コレクションですからFor Each~Next文で問題なく処理できるのです。

これが、拙著P.096で書いた
「厳密にはFor Each~Next文で処理可能なことを確認する」
の具体例です。

もちろんステップ実行中の「For Each itm In Presentations」を実行後に、ローカルウィンドウを表示すれば、拙著のLesson 18で行っている実習と同様に、変数itmの中身を確認できます。

Slides・Shapesも確認しましょう

同様に、Presentation.SlidesプロパティやSlide.Shapesプロパティの戻り値も、コレクションであることを確認しましょう。

上記のSubプロシージャでFor Eachの行を、
  For Each itm In ActivePresentation.Slides
や、
  For Each itm In ActivePresentation.Slides(1).Shapes
にしても、実行時エラーが発生しないことを確認してください。

コレクションであることを暗記するのではなく

そもそも何故このような確認を行うのか、疑問に感じる方がいらっしゃるかもしれません。

よく使うオブジェクトの場合、コレクションであることは、何度かコードを書けば覚えてしまいます。特にこの記事でご紹介しているPresentations・Slides・Shapesについては、単独のオブジェクトがそれぞれPresentation・Slide・Shapeで、コレクションはその複数形が名前になっている、素直な組み合わせですから。

しかし、あまり使ったことのないオブジェクトについて調査して理解する際には、コレクションなのかすぐに判断できないケースもあるのです。(そういうときのためにも)素直なPresentations・Slides・Shapesが、いずれもFor Each~Nextで処理できることを、自分の手と目を動かして確認しておいてください。

あるオブジェクトがコレクションであるかどうかは、暗記するものではありません。

最終更新日時:2020-06-05 17:04

[スポンサードリンク]

Home » いちばんやさしいPowerPoint VBAの教本 » コレクションであることをFor Each~Nextで確認しましょう

「いちばんやさしいPowerPoint VBAの教本」の記事一覧

検索


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

.