PowerPoint (一般・VBA)

PowerPoint 一般・VBAに関する話題を扱うフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : PowerPoint 2016)
PowerpointVBAで複数のShapeオブジェクトを選択削除したい。
投稿日時: 19/12/25 15:20:34
投稿者: gorby

Powerpointファイルを開いて、
ホーム-配置-オブジェクトの選択と表示 でスライドのShapeオブジェクト一覧が右側に表示されます。
そのうち、”Rectangle 2”という名前のShapeオブジェクトと画像すべてを削除するため、下記のコードを書いて実行しましたが、下から4行目のIf s.Type = msoPicture Then s.delete '★ここが重要!
で オブジェクトが必要です というエラーが発生します。
どのオブジェクトのことを言っているのかさっぱりわかりません。詳しい方、修正方法のアドバイスをお願いします。
なお、
If InStr(s.Name, "Rectangle 2") > 0 Then s.delete '★ここが重要!
If s.Type = msoPicture Then s.delete '★ここが重要!
のどちらかの行をコメントアウトして実行すると正常に動作するようです。
 
 
--<start of code>------
Sub delete()
Dim s As Shape 'sはshapeオブジェクトを入れる変数
Dim c As Collection 'cはコレクション
Dim start_slide As Integer 'start_slideはスライド番号1を入れる定数
Dim i As Integer 'iはスライド番号を入れる変数
 
start_slide = 1
For i = start_slide To ActivePresentation.Slides.Count
 
Set c = New Collection
For Each s In ActivePresentation.Slides(i).Shapes '変数sにアクティブスライド番号のすべてのshapeオブジェクトを入れる。
c.Add s
Next
For Each s In c
If InStr(s.Name, "Rectangle 2") > 0 Then s.delete '★ここが重要!
If s.Type = msoPicture Then s.delete '★ここが重要!
Next
Next
 
End Sub
 --<end of code>-----

回答
投稿日時: 19/12/25 16:19:04
投稿者: sk

引用:
”Rectangle 2”という名前のShapeオブジェクトと画像すべてを削除

引用:
If InStr(s.Name, "Rectangle 2") > 0 Then s.delete

引用:
If s.Type = msoPicture Then s.delete

If (InStr(s.Name, "Rectangle 2") > 0) Or (s.Type = msoPicture) Then s.delete
 
引用:
オブジェクトが必要です というエラーが発生します。

[Rectangle 2]が削除された時点で変数 s は[Rectangle 2]への参照を失っているのに、
その次の If 文で s の Type プロパティを参照しようとしているからです。

投稿日時: 19/12/25 17:14:18
投稿者: gorby

sk さんの引用:
引用:
”Rectangle 2”という名前のShapeオブジェクトと画像すべてを削除

引用:
If InStr(s.Name, "Rectangle 2") > 0 Then s.delete

引用:
If s.Type = msoPicture Then s.delete

If (InStr(s.Name, "Rectangle 2") > 0) Or (s.Type = msoPicture) Then s.delete
 
引用:
オブジェクトが必要です というエラーが発生します。

[Rectangle 2]が削除された時点で変数 s は[Rectangle 2]への参照を失っているのに、
その次の If 文で s の Type プロパティを参照しようとしているからです。

 
ありがとうございます。参考になります。