Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten 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
Antworten Top
#3
Hallo Elex,

vielen Dank, das war der entscheidende Hinweis!

Hätte ich wissen müssen  :16:
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten 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:

.xlsb   Bilder_loeschen_NICHT_CommandButton.xlsb (Größe: 120,08 KB / Downloads: 2)

Statt mit "Tabelle1" kannst du natürlich auch mit "ActiveSheet" arbeiten - welches ich aber vorsichtig einsetzen würde. :21:
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten 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
Antworten Top
#6
Vielen Dank Euch beiden.

Werde mir die Beispiele gut merken!

Ich wünsche Euch allen weiter gute Gesundheit!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top


Gehe zu:


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