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.
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?
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.
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?
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?
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?
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.