『いちばんやさしいPowerPoint VBAの教本』P.096より
拙著『いちばんやさしいPowerPoint VBAの教本』P.096のワンポイントで、オブジェクトがコレクションであるかどうかを判断するには、For Each~Next文で処理可能なことを確認する必要があると書きました。
その具体例を紹介しておきます。
オブジェクトがコレクションであることを確認する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で確認しましょう