2016-05-05 16 views
0

Ich habe ein Blatt, das Daten organisiert, stylisiert und zusammenfasst, und kopiert sich dann selbst und speichert eine andere Kopie als. PDF."Alle Formen auswählen" gibt Excel VBA Fehler 438 - "Objekt unterstützt diese Eigenschaft oder Methode nicht"

Auf dem Originalblatt gibt es 3 "Buttons" aus Gruppen von Formen zum Ausführen verschiedener Makros ("Reset", "Fix fehlende Mitarbeiter", "Drucken und E-Mail Zusammenfassung". Das Problem besteht darin, sie zu löschen . auf der Kopie Dieses ist von einem aufgezeichneten Makro:

ActiveSheet.Shapes.Range(Array("Group 2")).Select 
Selection.Delete 

I/löschen alle Formen wählen wollen, kann ich nicht verwenden „shapes.select“, „shapes.delete“, oder irgendetwas anderes ich. Hilfe gefunden für. Jeder Versuch neben dem oben aufgeführten Code führt zu "Fehler 438 - Objekt unterstützt diese Eigenschaft oder Methode nicht" und es markiert diesen Teil des Codes.

Wie kann ich alle Formen in einem Arbeitsblatt/Buch auswählen/löschen? (Mit Excel 2010)

Antwort

2

Sie müssen nicht alle Formen in einem Arbeitsblatt auswählen, um sie zu löschen. Eine Schleife reicht:

Sub ShapeKiller() 
    Dim sh As Shape 
    MsgBox ActiveSheet.Shapes.Count 
    For Each sh In ActiveSheet.Shapes 
     sh.Delete 
    Next sh 
End Sub 

Sie können mehr als eine Form gleichzeitig löschen. Hier ist ein Beispiel, das eine bestimmte Zeile findet und löscht alle Formen, deren obere Ecke ist in dieser Reihe:

Sub ShapePickerAndKiller() 
    Dim s As Shape, sr As ShapeRange 
    Dim Arr() As Variant 
    Set mycell = Range("A:A").Find(What:=0, After:=Range("A1")) 
    rrow = mycell.Row 

    i = 1 
    For Each s In ActiveSheet.Shapes 
     If s.TopLeftCell.Row = rrow Then 
      ReDim Preserve Arr(1 To i) 
      Arr(i) = s.Name 
      i = i + 1 
     End If 
    Next s 

    Set sr = ActiveSheet.Shapes.Range(Arr) 
    sr.Select 
    Selection.Delete 
End Sub 

Siehe older post

+0

Perfekt! Genau das habe ich gebraucht! –

+0

@ C-Love511 danke für das Feedback –

1

Hier ist die endgültige Lösung, die ich verwendet:

Dim sh As Shape 
For Each sh In ActiveSheet.Shapes 
    If sh.Type <> msoPicture Then 
     sh.Delete 
    End If 
Next sh 

Die Der Grund ist, weil ich eine Form hatte, die ich behalten wollte, mit einem Firmenlogo - The Shape Object Ansatz machte es sehr einfach, dies zu handhaben, aufgrund der Shape.Type Attribut (als eine Form war ein MsoPicture, und der Rest waren MsoRoundedRectangles). Auch hilfreich, wenn es ein Bild gegeben hätte, das ich löschen wollte, wäre Shape.Name gewesen, um den einen zu nennen, um zu löschen oder zu überspringen.

Shout out @ Garys Student für mich auf diesen Weg!

+0

Gute Arbeit ..................... –

Verwandte Themen