Diagramme mit VBA

… ermitteln, genauer: Welche Diagramme sind in einem Tabellenblatt?

Guten Morgen!

Ich habe eine Mappe mit mehreren Blättern. In jedem Blatt sind genau zwei Diagramme, deren Nummer ich nicht kenne, da in jedem Blatt anders. Mit einem Makro, der für alle Blätter gleich ist,  bearbeite ich die Diagramme. Je nach dem, in welchem Blatt ich bin, muss ich also die Nummer ermitteln:
ActiveSheet.ChartObjects("Chart " & ).Activate
muss ich also ermitteln.

Kann ich das?

Danke
Laika

Hola, da steckst du aber schon viel tiefer im Thema als ich.
Kann man nicht eine Schleife nehmen und einfach von 1…x durchlaufen lassen und darin prüfen ob das Diagramm (der Chart) da ist? Aber vielleicht gibt es ja auch schon eine Funktion dafür wie ActiveSheet.ChartObjects.exists?
Mehr kann ich dazu nicht sagen. sorry

Ich habe eine Mappe mit mehreren Blättern. In jedem Blatt sind
genau zwei Diagramme, deren Nummer ich nicht kenne, da in
jedem Blatt anders. Mit einem Makro, der für alle Blätter
gleich ist,  bearbeite ich die Diagramme. Je nach dem, in
welchem Blatt ich bin, muss ich also die Nummer ermitteln:
ActiveSheet.ChartObjects("Chart " &
).Activate
muss ich also ermitteln.

Hallo Laika,

Kann ich das?

ja, mitm richtigen Code :smile: Nachstehend der Code der demonstriert wie du da an die Nummer kommst. Aber die brauchst du doch m.E. nicht.
Schreib bitte anstatt
ActiveSheet.ChartObjects("Chart " & )
besser
ActiveSheet.ChartObjects(1)
bzw.
ActiveSheet.ChartObjects(2)

Grundsätzlich empfehle ich dir das Namenschaos zu beseitigen. Benenne in jedem Blatt das linke Chart als „Diag1“, das rechte Chart als „Diag2“ o.ä.
Stehen sie untereinander dann analog zu oben und unten.

Kannst auch den Blattnamen mit in den Diagrammnamen basteln, „Tab010Diag1“ usw.
Mache dafür eine neue Anfrage hier auf.

Gruß
Reinhard

Was du mit Nummer meinst gehört zum Namen des Charts.
Wenn du in einem neuen Blatt 10 Charts erstellst so benennt die Excel wahrscheinlich ,„Chart 1“, „Chart 2“, „Chart 3“ usw. bis ,„Chart 10“

Löschst du jetzt wahllos acht Stück bleiben ggfs. nur „Chart 4“ und „Chart 7“ übrig.

Sub tt()
Dim Nummer1, Nummer2
With Tabelle1
 MsgBox .ChartObjects(1).Name
 MsgBox .ChartObjects(2).Name
 Nummer1 = Replace(.ChartObjects(1).Name, "Chart ", "")
 Nummer2 = Replace(.ChartObjects(2).Name, "Chart ", "")
 MsgBox Nummer1
 MsgBox Nummer2
End With
End Sub

Danke Ihr zwei …
… die Diagramme sind nun mal aus „historischen Gründen“ nicht einheitlich benamst. Das Einfachste wird sein, mit

ActiveSheet.ChartObjects(1).Name

und

ActiveSheet.ChartObjects(2).Name

zu arbeiten.
Ich wusste nicht, war zu faul, in Beschreibungen zu suchen, wie man an den Namen eines Objekts heran kommt.

Gruss
Laika

… die Diagramme sind nun mal aus „historischen Gründen“
nicht einheitlich benamst. Das Einfachste wird sein, mit

ActiveSheet.ChartObjects(1).Name

und

ActiveSheet.ChartObjects(2).Name

zu arbeiten.
Ich wusste nicht, war zu faul, in Beschreibungen zu suchen,
wie man an den Namen eines Objekts heran kommt.

Hallo Laika,

okay, wenn du mal wieder ein Fleißig-Schub kriegst frag im Sprachenbrett nach wie das nachfolgende auf MS-Excel-Englisch aussieht :smile:

Für jedes T in Blättern
Mit T
 ..Diag(1).Name = "xyz"
 ..Diag(2).Name = "Diag2"
 ..Diag(1).Name = "Diag1"
Ende Mit

Gruß
Reinhard