Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Excel vba Shapes löschen
#1
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!
Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • sharky51
Top
#3
Hallo Elex,

vielen Dank, das war der entscheidende Hinweis!

Hätte ich wissen müssen  :16:
Top
#4
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:
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • sharky51
Top
#5
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Top
#6
Vielen Dank Euch beiden.

Werde mir die Beispiele gut merken!

Ich wünsche Euch allen weiter gute Gesundheit!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste