PowerPoint (一般・VBA)

PowerPoint 一般・VBAに関する話題を扱うフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : PowerPoint 2016)
PowerpointVBAを使って、Powerpointファイル内の特定文字列”hogehoge”を含むテキストボックスを全削除したい。
投稿日時: 19/12/12 13:17:27
投稿者: gorby

PowerpointVBAを使って、Powerpointファイル内の特定文字列”hogehoge”を含むテキストボックスを全削除したいです。
 
下記のコードの赤い箇所をどう直せば良いでしょうか? 直し方の判る方ご指導ください。
 
コードができたら、WinActorV6内のシナリオ内でこのPowerpointファイルを開いたあと、ショートカットキーをたたいてこのマクロを自動起動する予定です。
 
 
--<Start of code>-----
 
Sub delete()
     Dim s As Shape 'sはshapeオブジェクトを入れる変数
    Dim c As Collection 'cはコレクション
    Dim start_slide As Integer 'start_slideはスライド番号を入れる変数
 
    start_slide = 1
     For i = start_slide To ActivePresentation.Slides.Count
         'If i = 254 Then
         ' GoTo continue
         'End If
         Set c = New Collection
         For Each s In ActivePresentation.Slides(i).Shapes '変数sにアクティブスライド番号のすべてのshapeオブジェクトを入れる。
            c.Add s
         Next
         For Each s In c
         If s.Type = msoTextBox Then
                s.delete
            End If
Next
 'continue:
     Next
    'MsgBox "the process is finished."
 End Sub
 
--<End of code>-----

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

引用:
PowerpointVBAを使って、Powerpointファイル内の
特定文字列”hogehoge”を含むテキストボックスを全削除

(標準モジュール)
-------------------------------------------------------------
Sub DeleteShapes()
 
    Dim prs As PowerPoint.Presentation
    Dim sld As PowerPoint.Slide
    Dim shp As PowerPoint.Shape
    Dim strKeyWord As String
     
    strKeyWord = "hogehoge"
     
    Set prs = ActivePresentation
     
    For Each sld In prs.Slides
        For Each shp In sld.Shapes
            Select Case shp.Type
                Case msoPlaceholder, msoTextBox
                    Call DeleteShape(shp, strKeyWord)
                Case Else
                    '何もしない
            End Select
        Next
    Next
     
    Set prs = Nothing
 
End Sub
 
Sub DeleteShape(Shape As PowerPoint.Shape, _
                Optional ByVal KeyWord As String = "")
                     
    With Shape
        If KeyWord = "" Then
            .Delete
        Else
            If .HasTextFrame Then
                If InStr(.TextFrame2.TextRange.Text, KeyWord) > 0 Then
                    .Delete
                End If
            End If
        End If
    End With
 
End Sub
-------------------------------------------------------------
 
以上のようなコードを実行なさればよろしいのではないかと。

トピックに返信