Powerpoint VBAでわからないこと
PowerpointのVBAとの付き合いは ここ二ヶ月くらいです。
データの処理をするならやはりExcelですが,こと教材を作ろうというときはPowerpointVBA優勢です。
マクロがなくてもかなりのことができるソフトですしね,あたりまえといえば当たり前なのかも。
何か作りたいと思ったときに対応できるように,いろんなケースを想定してみて,
試しに作ってみるという作業をしています。
たくさん図形をコードで描かせて消すという作業をするので,次のようなコードをよく書きます。
Option Explicit Sub a() Dim x As Shape For Each x In ActivePresentation.Slides(1).Shapes x.Delete Next Set x=Nothing End Sub
わたしの経験では,このコードでこのスライド内のすべての図形を消してくれるはずなんですが,
結果は次の通り
えーっと・・・
しかもたまたまなのか,今までちゃんと考えていませんでしたが見事に奇数の図形だけが消えてます・・・。
もう一回やってみました。
見事に法則性がありますね(;´▽`A``
今まで適当に考えてて,これをさらに do ~ loop until activepresentation.slides(1).shapes.count=0
みたいに囲んで強引にやってたんですが,for each ステートメントに不安を感じざるを得ません。
ただ,deleteではなく debug.print x.name とかはうまくいくんですよね。
消すときにidが減っていって うまく処理ができてないとか わたしら初心者レベルの不具合でも内部にあるのか・・・?
誰か解決法を知っていたらぜひ教えてください_(._.)_
そうそう,これを書いてて気づいたんですが,パワーポイントのほうは,
マクロも 元に戻す 効くんですね。驚き。びっくりしました。
追記 あたりまえではありますが,
Sub b() Dim i As Long For i = 1 To ActivePresentation.Slides(1).Shapes.Count ActivePresentation.Slides(1).Shapes(1).Delete Next End Sub Sub c() Dim i As Long For i = ActivePresentation.Slides(1).Shapes.Count To 1 Step -1 ActivePresentation.Slides(1).Shapes(i).Delete Next End Sub
で消すことはできました。でも,for each ● in ●s ~ next ってとても好きなので,それが動かないのはイヤダナァ。