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

VBA: Name eines Shape-Objekts

Forumthread: VBA: Name eines Shape-Objekts

VBA: Name eines Shape-Objekts
Günther
Hallo,
Beim Versuch per VBA zu ermitteln, ob es ein Shape-Objekt mit einem bestimmten Namen nicht mehr gibt, bin ich auf etwas gestoßen, dessen Logik sich mir nicht so recht erschließt. Würde mich freuen, wenn jemand einen Tipp für mich hat:
Wenn man die Erstellung eines Textfeldes aufzeichnet, bekommt es im Makro den Namen "Textbox 1" und im Namenfeld der Excel-Oberfläche den Namen "Textfeld 1". Diesen kann man anschließend per Namenfeld oder VBA-Befehl (ActiveSheet.Shapes(1).Name = "...") beliebig ändern, zB auf "Günther". Die Shapes-Auflistung enthält nun genau ein Element und folgende Befehle liefern:
ActiveSheet.Shapes(1).Name
ergibt: Günther (das ist logisch)
ActiveSheet.Shapes("Günther").Name
ergibt: Günther (das ist auch logisch)
ActiveSheet.Shapes("Textbox 1").Name
ergibt: Günther (das ist nicht logisch - zumindest nicht für mich - und mit meinem aktuellen Wissensstand ;-) ...
Gemäß meinem Verständnis, sollte beim dritten Befehl die übliche Fehlermeldung kommen, dass es in der Auflistung kein Element mit diesem Namen gibt.
Ist es so, dass jedes Shape zwei Namen besitzt?
Wie kann ich den "internen Namen" "Textbox 1" verändern oder abfragen?
Danke für alle Hinweise.
vg Günther
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Wenn ich mich recht entsinne, ist es bei dieser...
24.06.2012 21:05:12
Luc:-?
…Art von Objekten so wie du vermutest, Günther.
Dieser „interne“ Name dürfte sich dann auch nicht verändern lassen, weil er wohl in bestimmten Situationen so benötigt wird. Die 2 Internnamen resultieren wohl aus lokaler und originaler Namensform, die übrigens (unter Xl9) exakt "Text Box 1" lautet. Solange kein individueller Name vergeben wurde, wird per VBA stets die originale Namensform wiedergegeben. Möglicherweise ist das mit der Caption-Eigenschaft von Formular­steuer­elementen vglbar, allerdings kann man da auch die Namen dauerhaft ändern.
Beide Namensformen, lokal und original, können neben dem evtl vergebenen Individualnamen (quasi „Caption“) und dem Index zur Ansprache eines Shapes benutzt wdn. Das gilt auch für andere Shape-Typen.
Gruß Luc :-?
Anzeige
AW: Wenn ich mich recht entsinne, ist es bei dieser...
26.06.2012 11:48:18
Günther
Hallo Luc,
Danke für Deine Antwort!
Ist Dir irgendeine Möglichkeit bekannt, diesen "internen" Namen gezielt abzufragen?
Also so etwas in der Art
ActiveSheet.Shapes("Günther").InternalName
und das ergibt dann:
"Textbox 1"
Oder geht da nur ein üblicher Schleifenansatz (zB wie folgt), der aber darauf basiert, das man die Struktur des Namens kennt und man eine Obergrenze vorgibt.
Function ShapeInternalName(ExternalName As String) As String
Dim IntName As String, ExtName As String
ShapeInternalName = "Keine Textbox mit diesem Namen."
On Error Resume Next
For x = 1 To 100
IntName = "Textbox " & x
ExtName = ActiveSheet.Shapes(IntName).Name
If Err.Number = 0 Then
If ExtName = ExternalName Then ShapeInternalName = IntName
Else
Err.Clear
End If
Next
End Function

Anzeige
Nein, nicht dass ich wüsste, ...
26.06.2012 17:54:22
Luc:-?
…Günther,
denn die wdn einfach immer nur endlos flfd durchnummeriert. Vermutlich wdn sie xl-intern verwaltet - ohne Zugriffsmöglichkeit (deshalb wohl auch nicht änderbar, weil HptOrdnungsBegriff der internen Objekt-DB). Der neue Name ist dann nur eine Eintragung zu diesem HOB, über die aber auch auf alle anderen zugegriffen wdn kann, wohl nur nicht auf den HOB (kenne keinen VBA-Bezeichner dafür → wird wohl auch nicht existieren, weil Manipulation möglicherweise von MS für unnötig gehalten).
Also wird's wohl nur mit der umständl Methode gehen.
Gruß Luc :-?
Anzeige
AW: Nein, nicht dass ich wüsste, ...
26.06.2012 23:20:09
Günther
Danke!
Grüße Günther
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Shape-Objekte in Excel VBA: Namen ermitteln und verwalten


Schritt-für-Schritt-Anleitung

  1. Erstellen eines Shapes: Füge ein Textfeld oder ein anderes Shape in dein Excel-Arbeitsblatt ein.

  2. Namen vergeben: Du kannst den Namen des Shapes entweder über das Namenfeld in der Excel-Oberfläche oder per VBA ändern. Zum Beispiel:

    ActiveSheet.Shapes(1).Name = "Günther"
  3. Shape-Namen abfragen: Um den Namen eines Shapes zu ermitteln, kannst du den folgenden Befehl verwenden:

    MsgBox ActiveSheet.Shapes(1).Name
  4. Zugriff auf den "internen" Namen: Der interne Name kann nicht direkt abgerufen werden, aber du kannst eine Schleife verwenden, um den Namen zu ermitteln:

    Function ShapeInternalName(ExternalName As String) As String
       Dim IntName As String, ExtName As String
       ShapeInternalName = "Keine Textbox mit diesem Namen."
       On Error Resume Next
       For x = 1 To 100
           IntName = "Textbox " & x
           ExtName = ActiveSheet.Shapes(IntName).Name
           If Err.Number = 0 Then
               If ExtName = ExternalName Then ShapeInternalName = IntName
           Else
               Err.Clear
           End If
       Next
    End Function

Häufige Fehler und Lösungen

  • Fehler: #NAME? bei Verwendung von Shape-Namen: Dieser Fehler tritt auf, wenn der angegebene Name nicht existiert. Stelle sicher, dass der Name korrekt geschrieben und das Shape tatsächlich vorhanden ist.

  • Fehler beim Abrufen des internen Namens: Es gibt keine direkte Möglichkeit, den internen Namen eines Shapes abzurufen. Verwende stattdessen die oben genannte Schleifenfunktion.


Alternative Methoden

Eine alternative Methode, um ein Shape zu erstellen und einen Namen zu vergeben, ist die Verwendung von AddTextbox:

Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 100, 200, 50)
shp.Name = "MeinTextfeld"

Diese Methode ermöglicht es dir, ein Shape direkt zu erstellen und ihm einen Namen zuzuweisen.


Praktische Beispiele

  • Beispiel 1: Shape erstellen und benennen:

    Sub CreateAndNameShape()
       Dim shp As Shape
       Set shp = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 50, 50, 100, 50)
       shp.Name = "Textfeld1"
    End Sub
  • Beispiel 2: Namen von Shapes in einer Schleife auflisten:

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

Tipps für Profis

  • Nutze die ActiveSheet.Shapes-Sammlung, um effizient auf Shapes zuzugreifen und ihre Eigenschaften zu verwalten.
  • Vermeide es, Namen mit Leerzeichen oder Sonderzeichen zu verwenden, um Komplikationen zu vermeiden.
  • Dokumentiere deine Shapes und deren Namen, um die Übersichtlichkeit zu erhöhen, besonders bei umfangreichen Excel-Dokumenten.

FAQ: Häufige Fragen

1. Wie kann ich den Namen eines Shapes in Excel VBA ändern?
Du kannst den Namen eines Shapes mit dem Befehl ActiveSheet.Shapes("AltesName").Name = "NeuesName" ändern.

2. Gibt es eine Möglichkeit, den internen Namen eines Shapes zu ändern?
Nein, der interne Name eines Shapes kann nicht geändert werden. Du kannst jedoch den sichtbaren Namen über VBA oder das Namenfeld anpassen.

3. Warum zeigt der Befehl ActiveSheet.Shapes("Textbox 1").Name trotzdem den neuen Namen an?
Das liegt daran, dass Shapes in Excel sowohl einen sichtbaren Namen als auch einen internen Namen haben. Der Befehl gibt den sichtbaren Namen zurück, auch wenn du den internen Namen abfragst.

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