Excel-Makro zum Kopieren von Diagrammen

Hallo allerseits

Ich hab da folgendes Problem:
Ich habe in einer Excel-Mappe ein Diagram, dass ich gerne mit einem Excel-Makro kopieren und anschließend von dem neuen Diagramm die Datenquelle ändern würde. Ich habe mit meiner laienhaften Makroerfahrung schon folgendes zusammen bekommen:
Sub Makro1()

’ Makro1 Makro
’ Makro am 08.08.2009 von Tobias Doll aufgezeichnet

’ Tastenkombination: Strg+y

ActiveSheet.ChartObjects(„Diagramm 3“).Activate
ActiveChart.ChartArea.Select
ActiveChart.ChartArea.Copy
ActiveWindow.Visible = False
Windows(„Mappe2“).Activate
Range(„D20“).Select
ActiveSheet.Paste
ActiveSheet.ChartObjects(„Diagramm 1“).Activate
ActiveChart.SetSourceData Source:=Sheets(„Tabelle1“).Range(„A20:B35“), _
PlotBy:=xlColumns
End Sub

Wenn ich das Makro so ausführe erhalte ich folgende Fehlermeldung:
Laufzeitfehler ‚438‘
Objekt unterstützt Eigenschaften oder Methode nicht
und werde beim debuggen an folgende Zeile verwiesen:
ActiveSheet.ChartObjects(„Diagramm 1“).Activate

Ich glaube es liegt an "Diagramm 1. Ich weiß aber nicht, wie man das ändern könnte.
Danke schonmal im voraus
Tobias

Ich habe in einer Excel-Mappe ein Diagram, dass ich gerne mit
einem Excel-Makro kopieren und anschließend von dem neuen
Diagramm die Datenquelle ändern würde. Ich habe mit meiner
laienhaften Makroerfahrung schon folgendes zusammen bekommen:
Sub Makro1()

’ Makro1 Makro
’ Makro am 08.08.2009 von Tobias Doll aufgezeichnet

’ Tastenkombination: Strg+y

ActiveSheet.ChartObjects(„Diagramm 3“).Activate
ActiveChart.ChartArea.Select
ActiveChart.ChartArea.Copy
ActiveWindow.Visible = False
Windows(„Mappe2“).Activate
Range(„D20“).Select
ActiveSheet.Paste
ActiveSheet.ChartObjects(„Diagramm 1“).Activate
ActiveChart.SetSourceData
Source:=Sheets(„Tabelle1“).Range(„A20:B35“), _
PlotBy:=xlColumns
End Sub

Wenn ich das Makro so ausführe erhalte ich folgende
Fehlermeldung:
Laufzeitfehler ‚438‘
Objekt unterstützt Eigenschaften oder Methode nicht
und werde beim debuggen an folgende Zeile verwiesen:
ActiveSheet.ChartObjects(„Diagramm 1“).Activate

Ich glaube es liegt an "Diagramm 1. Ich weiß aber nicht, wie
man das ändern könnte.

Hallo,

vermutlich liegt es daran, dass du beim Laufenlassen des Makros nicht jeweils das Tabellenblatt aktiviert hast, das im Code mit ActiveSheet gemeint ist. In dem Fall musst du im Makrocode jeweils ActiveSheet durch Worksheets(Index) ersetzen. Außerdem setzt dein Makro voraus, dass die zweite Datei bereits geöffnet ist, sonst muss das erstmal im Makrocode erfolgen. Wenn aber zwei Dateien geöffnet sind, genügt in der Regel nicht mehr das Objekt Worksheets, sondern es muss mit Workbooks(Name).worksheets(index) präzisiert werden.

Gruß
smalbop

Danke smalbop für die schnelle Antwort.

Ich glaube allerdings mein Problem ist anderer Natur.
Ich habe eine größere Anzahl von Excel-Dateien bekommen, die alle gleich aufgebaut sind. Das Problem ist, dass die Diagramme in alle diesen Dateien immer wieder unterschiedliche Nummern haben.
Daher glaube ich dass Excel den Befehl
ActiveSheet.ChartObjects(„Diagramm 3“).Activate
nicht ausführen kann, weil „Diagramm 3“ in einer anderen Excel-Datei „Diagramm 5“ oder „Diagramm 27“ heißt.
Gibt es eine Möglichkeit allen diesen Diagrammen einen Namen zu geben, oder die Diagramme anhand ihrer Position zu aktivieren?

Danke schonmal
Tobias

Hallo,

wenn das Diagramm das einzige ChertObject auf jedem Blatt ist, dann hat es den Index 1. Dann kann dieser statt des veränderlichen Namens in der Klammer stehen. Also ChartObjects(1). Versuchs mal.

Gruß
smalbop

Danke smalbop

Dein Tipp hat super. Eine kleine Frage hätt ich noch:
Wie kann man, wenn mehere Diagramme in einem Blatt sind, die Nummer von dem Diagramm herausfinden, dass man kopieren will?

Danke
Tobias

Dein Tipp hat super. Eine kleine Frage hätt ich noch:
Wie kann man, wenn mehere Diagramme in einem Blatt sind, die
Nummer von dem Diagramm herausfinden, dass man kopieren will?

Hallo Tobias,

wenn da 5 Diagramme auf einem Blatt sind, woher soll denn dann Vba wissen welches du kopieren willst?
Was ist dein Plan?

Gruß
Reinhard

Hallo Reinhard

Das Diagramm, dass ich kopieren will ist immer auf derselben Position innerhalb des Tabellenblattes. Gibt es eine Möglichkeit ein Diagramm anhand seiner Position innerhalb des Tabellenblattes auszuwählen und zu aktivieren?

Tobias

Das Diagramm, dass ich kopieren will ist immer auf derselben
Position innerhalb des Tabellenblattes. Gibt es eine
Möglichkeit ein Diagramm anhand seiner Position innerhalb des
Tabellenblattes auszuwählen und zu aktivieren?

hallo Tobias,

ja. So wie ich es kenne hat jedes Objekt auf einem Tabellenblatt (lassen wir mal Userforms beiseite) eine Postion auf dem Blatt die man mit TOp und Left auswerten kann.

Top=0
Left=0
bedeutet, das Objekt hat seine linke obere Ecke ganz oben links im Blatt.

Top=100
left=200
bedeutet, die linke obere Ecke des Objekts ist 100 Pixel unterhalb der obersten linken Ecke des Blattes und 200 Pixel rechts davon.

Dazu gibt es noch TopLeftCell, damit erhält man die die Zelladresse in der die linke obere Ecke des Objekts steht.

Das sind jetzt die Möglichkeiten die mir spontan einfallen.

Ich kann jetzt Vba-Code schreiben der aufgrund der Left und Top-Werte ein Diagramm uaswählt, oder anhand der TopLeftCell.

Was möchtest du?

Gruß
Reinhard

Hallo Reinhard

Vielen Dank für das Angebot!
Ich würde gerne die TopLeftCell-Variante nehmen!

Danke
Tobias