मेरे पास आकृतियों के साथ कुछ प्रस्तुतियां हैं जिन्हें मुझे हटाना है, साथ में

  • विशिष्ट। नाम
  • विशिष्ट रंग

विशिष्ट .Name वाली आकृतियों को समूहीकृत किया जा सकता है (मेरे कोड में नहीं)। मुझे स्टैक ओवरफ्लो में कोड मिला और इसे संशोधित करने का प्रयास किया।

  1. नाम से आकार ढूंढें और उसे हटा दें: विशिष्ट .Name "XXName1" और साथ ही "Name1" भी हो सकता है।

अगर .Name = "Name1" के साथ कोई आकृति नहीं है तो मुझे एक त्रुटि मिलती है

"वस्तु मौजूद नहीं है"

लाइन पर If .Name = "Name1" Or .Name = "Name2" Then

कभी-कभी कोड काम करता है, और फिर, यदि प्रस्तुति में बहुत सारी स्लाइड हैं, तो मुझे एक त्रुटि है। जब मैं 1-स्लाइड प्रस्तुति के साथ परीक्षण करता हूं - कोई त्रुटि नहीं।

  1. रंग से आकार ढूंढें और इसे हटाएं:

मुझे एक त्रुटि है

"वस्तु चर या ब्लॉक चर के साथ सेट नहीं हो सकता"

मुझे समझ नहीं आ रहा है कि वेरिएबल घोषित कैसे करें

Sub DeleteShapes()
    Dim oSld   As Slide
    Dim oShp   As Shape
    Dim oshpGroup As Shape
    Dim Y As Long
    Dim L As Long
    Dim str As String
        
    For Each oSld In ActivePresentation.Slides
        For L = oSld.Shapes.Count To 1 Step -1
            With oSld.Shapes(L)
            ' Find shape by name and delete it
                If .Name = "XXName1" Or .Name = "XXName2" Then
                    .Delete
                End If
                If .Name = "Name1" Or .Name = "Name2" Then
                    .Delete
                End If
                
                ' Find shape by color and delete it            
                If oShp.Fill.ForeColor.RGB = RGB(0, 0, 0) Or _
                  oShp.Fill.ForeColor.RGB = RGB(1, 1, 1) Or _
                  oShp.Fill.ForeColor.RGB = RGB(2, 2, 2) Or _
                  oShp.Fill.ForeColor.RGB = RGB(3, 3, 3) Then
                    oShp.Delete
                End If
            End With
        Next L
    Next oSld
End Sub
0
Lena Kire 19 अक्टूबर 2020, 17:39

1 उत्तर

सबसे बढ़िया उत्तर

किसी आकृति को हटाने के बाद आप उसका उल्लेख नहीं कर सकते (जो आपने पहले किया था)। अपना क्रम बदलें यदि...यदि समाप्त करें, यदि...समाप्त करें यदि से...अन्यथा...अन्यथा...यदि समाप्त करें। - @बिग बेन

मेरा संशोधित कोड:

Sub DeleteShapes()
    Dim oSld   As Slide
    Dim oShp   As Shape
    Dim L As Long
    
    For Each oSld In ActivePresentation.Slides
        For L = oSld.Shapes.Count To 1 Step -1
            With oSld.Shapes(L)
                If .Name = "XXName1" Or .Name = "XXName2" Then
                    .Delete
                ElseIf .Name = "Name1" Or .Name = "Name2" Then
                    .Delete
                ElseIf .Fill.ForeColor.RGB = RGB(0, 0, 0) Then
                    .Delete
                ElseIf .Fill.ForeColor.RGB = RGB(1, 1, 1) Then
                    .Delete
                ElseIf .Fill.ForeColor.RGB = RGB(2, 2, 2) Then
                    .Delete
                ElseIf .Fill.ForeColor.RGB = RGB(3, 3, 3) Then
                        .Delete
                End If
            End With
        Next L
    Next oSld
End Sub
0
Lena Kire 19 अक्टूबर 2020, 20:34