Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Namen für Shape per VBA ändern

Namen für Shape per VBA ändern
14.02.2018 14:32:53
earlycon
Hallo zusammen,
ich suche eine VBA-Funktion, mit der einzelnen Shape-Objekten ein neuer Name zugewiesen werden kann. Derzeit sind die Namen an die Zeile in der sie stehen gekoppelt (z.B. Auswahl52). Also ein Auswahlfeld in Zeile 52 (Spalte F).
Problem: werden Zeilen eingefügt, stimmen natürlich die ganzen Zuordnungen nicht mehr. Ich möchte jetzt sagen können, das Shape, welches jetzt z.B. in Zelle F55 steht, soll den Namen "Ausw55" bekommen. Und das in einer Schleife für alle Shapes in Spalte F.
Und wie kann ich abfragen, ob in einer Zelle überhaupt ein Shape enthalten ist ? Wenn nicht soll die Schleife einfach weiterlaufen ?
Kann mir da jemand mit einer Idee behilflich sein ?
Vielen Dank und sonnige Grüße
Stefan
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: for each Shp in .Shapes
14.02.2018 15:41:48
Fennek
Hallo,
alle Shapes in einer Schleife geht recht gut (siehe Betreff), aber vorallem braucht man eine eindeutige Zuordnung alterName - neuerName.
Dies ist als Text hier im Forum nicht so leicht zu kommunizieren.
mfg
AW: for each Shp in .Shapes
14.02.2018 16:01:58
EtoPHG
Hallo Stefan,
Und wie kann ich abfragen, ob in einer Zelle überhaupt ein Shape enthalten ist ?
Das kannst du nicht, aber das umgekehrte geht, d.h.
du kannst abfragen in welcher Zelle sich die linke obere 'Ecke' des Shapes befindet, nämlich anhand der Eigenschaft .TopLeftCell
z.B. so als Code in einem Tabellenblatt (mit Shapes)
Sub Showshapes()
Dim sh As Shape
For Each sh In Me.Shapes
MsgBox sh.Name & " befindet sich in " & sh.TopLeftCell.Address(0, 0)
Next sh
End Sub
Gruess Hansueli
Anzeige
AW: for each Shp in .Shapes
15.02.2018 06:55:52
earlycon
Guten Morgen,
hm... das ist ein Ansatz.
Vielen Dank für Eure Rückmeldungen, ich experimentiere damit mal.
Gruß
Stefan
AW: for each Shp in .Shapes
15.02.2018 08:14:22
earlycon
Sorry, noch mal eine Frage:
kann man in VBA ein Shape ansprechen, dessen Namen man nicht kennt (so wie z.B. "das Shape welches sich in Zelle B5 befindet" ?
Besten Dank und Gruß
Stefan
Anzeige
AW: for each Shp in .Shapes
15.02.2018 11:42:58
EtoPHG
Hallo,
Das hab ich doch oben geklärt!
Du musst alle Shapes abklappern und überprüfen, ob die Adresse der TopLeftCell-Eigenschaft mit deiner gesuchten Zell-Adresse übereinstimmt. Dann bekommst du den Namen des entsprechenden Shapes!
Gruess Hansueli
AW: for each Shp in .Shapes
15.02.2018 14:12:43
earlycon
Hallo Hansueli,
manchmal fällt der Groschen etwas spät, zumal ich auch nicht soo der Excelfreak bin :-)
Aber nach ein wenig probieren habe ich es jetzt hinbekommen, das den jeweiligen Shapeobjekten ein neuer Name gemäß der Zeile in der sie stehen zugewiesen wird:
For Each sh In Me.Shapes
NeuerName_Marker = "Marker" & ActiveCell.Row
sh.Select
If sh.TopLeftCell.Address(0, 0) = ActiveCell.Address(False, False) Then
sh.Name = NeuerName_Marker
Besten Dank für Deinen Rat.
Gruß
Stefan
Anzeige
AW: for each Shp in .Shapes
15.02.2018 14:31:40
EtoPHG
Hallo Stefan,
.Select ist in VBA einer der überflüssigsten Befehle, als lieber so:
Sub neuMarkieren()
Dim sh As Shape
For Each sh In Me.Shapes
sh.Name = "Marker" & sh.TopLeftCell.Address(0, 0)
Next sh
End Sub

AW: for each Shp in .Shapes
15.02.2018 15:31:40
earlycon
Du hast recht. Das war aber nur ein Überbleibsel, um zu beobachten, welches Shape er gerade am Wickel hat... :-)
Hab´s rausgelöscht !
Danke
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Namen für Shape per VBA ändern


Schritt-für-Schritt-Anleitung

Um in Excel VBA die Namen von Shapes zu ändern, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Öffne das VBA-Editor-Fenster mit ALT + F11.

  2. Erstelle ein neues Modul: Rechtsklick auf "VBAProject", dann "Einfügen" und "Modul" auswählen.

  3. Füge den folgenden Code in das Modul ein:

    Sub ShapeNamenAendern()
        Dim sh As Shape
        For Each sh In ActiveSheet.Shapes
            sh.Name = "Marker" & sh.TopLeftCell.Row
        Next sh
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus: Gehe zu Entwicklertools > Makros, wähle ShapeNamenAendern und klicke auf Ausführen.

Dieser Code durchläuft alle Shapes auf dem aktiven Arbeitsblatt und ändert deren Namen basierend auf der Zeile, in der sie sich befinden (z.B. "Marker1", "Marker2" usw.).


Häufige Fehler und Lösungen

  • Problem: "Laufzeitfehler 1004: Fehler beim Benennen des Shapes".

    • Lösung: Stelle sicher, dass der neue Name den Namenskonventionen von Excel entspricht. Der Name darf z.B. keine Leerzeichen enthalten und muss einzigartig sein.
  • Problem: Shapes werden nicht gefunden.

    • Lösung: Überprüfe, ob die Shapes in dem aktiven Arbeitsblatt vorhanden sind und ob du im richtigen Arbeitsblatt arbeitest.

Alternative Methoden

Eine alternative Methode, um Shapes in VBA anzusprechen, ist die Verwendung der TopLeftCell-Eigenschaft, um gezielt Shapes zu finden. Hier ist ein Beispiel, wie du ein Shape ansprechen kannst, dessen Name dir nicht bekannt ist:

Sub ShapeAnsprechen()
    Dim sh As Shape
    Dim gesuchteZelle As String
    gesuchteZelle = "B5" ' Beispiel: die Zelle, in der das Shape steht

    For Each sh In ActiveSheet.Shapes
        If sh.TopLeftCell.Address = Range(gesuchteZelle).Address Then
            MsgBox "Das Shape in " & gesuchteZelle & " heißt: " & sh.Name
        End If
    Next sh
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Shapes in Excel VBA ansprechen und umbenennen kannst:

  1. Alle Shapes in einer bestimmten Spalte umbenennen:

    Sub ShapesInSpalteFUmbenennen()
        Dim sh As Shape
        For Each sh In ActiveSheet.Shapes
            If sh.TopLeftCell.Column = 6 Then ' Spalte F
                sh.Name = "Shape_" & sh.TopLeftCell.Row
            End If
        Next sh
    End Sub
  2. Shape-Namen basierend auf einer Bedingung ändern:

    Sub BedingteShapeNamenAendern()
        Dim sh As Shape
        For Each sh In ActiveSheet.Shapes
            If sh.TopLeftCell.Value = "Aktiv" Then
                sh.Name = "Aktiv_" & sh.TopLeftCell.Row
            End If
        Next sh
    End Sub

Tipps für Profis

  • Verwende On Error Resume Next, um Laufzeitfehler zu vermeiden, wenn ein Shape bereits einen bestimmten Namen hat.

  • Setze immer eine klare Benennungskonvention für Shapes, um Verwechslungen zu vermeiden.

  • Nutze die Debug.Print-Anweisung, um während der Entwicklung Informationen zur Konsole auszugeben, was dir hilft, den Code zu testen und zu debuggen.


FAQ: Häufige Fragen

1. Wie kann ich alle Shapes auf einem Arbeitsblatt auflisten?
Du kannst eine Schleife verwenden, um alle Shapes zu durchlaufen und deren Namen auszugeben. Beispiel:

Sub AlleShapesAuflisten()
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        Debug.Print sh.Name
    Next sh
End Sub

2. Kann ich Shapes in verschiedenen Arbeitsblättern umbenennen?
Ja, du kannst eine Schleife für jedes Arbeitsblatt verwenden und darin den Code zur Umbenennung der Shapes einfügen. Achte darauf, das richtige Arbeitsblatt anzusprechen, z.B. Worksheets("Blattname").Shapes.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige