Clever-Excel-Forum

Normale Version: Excel vba Shapes löschen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

darf ich Euch wieder einmal um Eure werte Hilfe bitten?

Ich ziehe mir mit copy/paste Daten aus einer Webseite um diese dann auszuwerten. Funktioniert auch alles super.

Auf der www-Seite sind aber auch einige Autoshape xx die durch den Kopiervorgang in meinem Tabellenblatt landen. Auf dem Blatt sind auch noch von mir zwei eingefügte Commandbuttons
Die Shapes möchte ich aber nun gelöscht haben - die Commandbuttons sollen unberücksichtigt bleiben.

Versucht habe ich es mit diesen Code...der aber mit Laufzeitfehler und dieser Meldung aussteigt "Der Index in der angegebenen Sammlung ist außerhalb des zulässigen Bereichs"

Code:
Sub ShapeKill()
  For ShapeZähler = 1 To ActiveSheet.Shapes.Count
      Debug.Print ActiveSheet.Shapes(ShapeZähler).Name
     
      If Not ActiveSheet.Shapes(ShapeZähler).Name Like "*Control*" Then
        ActiveSheet.Shapes(ShapeZähler).Select
        ActiveSheet.Shapes(ShapeZähler).Delete
      Else
        'tue nix
      End If
  Next ShapeZähler
End Sub

Könnt Ihr mir bitte sagen was zu tun ist damit alle Shapes gelöscht werden und die zwei Commandbuttons unbehelligt bleiben?

Vielen Dank!
Hi

Das könnte dir helfen.
Allgemein sollten Index Löschschleifen egal ob (Zeilen, Blätter usw…) Rückwärts bearbeitet werden.
 
For j = Gesamt to 1 Step -1


Gruß Elex
Hallo Elex,

vielen Dank, das war der entscheidende Hinweis!

Hätte ich wissen müssen  :16:
Hallo Erich, :19:

du könntest auch mit einer "For Each - Schleife" arbeiten, dann müsstest du dir über Zählungen keine Gedanken machen: :21:
[attachment=30546]

Statt mit "Tabelle1" kannst du natürlich auch mit "ActiveSheet" arbeiten - welches ich aber vorsichtig einsetzen würde. :21:
Hallo,

für alle, die nicht extra eine Makrodatei herunterladen wollen/können/dürfen, hier das Makro von Case:

Code:
Public Sub Main()
    Dim shpShape As Shape
    For Each shpShape In Tabelle1.Shapes
        With shpShape
            If .Type <> msoOLEControlObject Then
                .Delete
            End If
        End With
    Next shpShape
End Sub

Gruß Uwe
Vielen Dank Euch beiden.

Werde mir die Beispiele gut merken!

Ich wünsche Euch allen weiter gute Gesundheit!