Excel VBA Diagramm verschieben

ich habe mit dem makrorekorder ein Diagramm erzeugt. Leider wird dieses Diagramm an einer ungünstigen Stelle erzeugt.
Ich würde gern dieses Diagramm verschieben können.

Mein Code:

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(„D15:E“ & i)
ActiveChart.ChartType = xlLine
ActiveChart.ChartArea.Width = 660
ActiveChart.ChartArea.Height = 500

Vielleicht kann mir jemand helfen

Versuch es mal damit:

 ActiveSheet.Shapes("Diagramm 1").IncrementLeft 123.45
 ActiveSheet.Shapes("Diagramm 1").IncrementTop -87

den Namen des Diagramms und die Zahlen musst du natürlich anpassen

Aber mein Diagramm hat aber keinen Namen

Hallo eugen1234,

da kann ich leider nicht helfen. Mit Diagrammen habe ich nicht viel Erfahrung

Gruß Hugo

Einfach mit der Maus an den Rand fahren bis Maus zum Kreuz wird.
Die Linken Maustaste Halten, und ziehen.

Hallo,

mein pragmatischer und ungetesteter Vorschlag wäre: Die Eigenschaften Top und Left des Charts zu setzen. Da Top und Left aber keine typischen Excel-Koordinaten annehmen, wäre das eher so etwas wie:
ActiveChart.Top = range(„A1:B2“).Height
ActiveChart.Left = range(„A1:B2“).Width

wenn die linke obere Ecke A1:B2 darstellen soll.
Da ich hier kein Excel zur Verfügung habe, kann ich das aber leider nicht verifizieren.

gegrüsst!

gegrüsst!

Natürlich hat es einen internen Namen.
Versuch mal folgendes:
Starte den Makrorekorder und verschiebe das Diagramm per Hand. Stoppe den Makrorekorder und sieh dir den Code mal an.

Ich habe mal ein Diagramm mit dem folgenden Code oben links ausgerichtet und auf die gesamte Seite angepasst.
Mein Diagramm wird immer ab Zeile 3 und Spalte 1 angezeigt.
Mit den letzten beiden Befehlen bestimme ich dann die Fensterbreite als Diagrammbreite.

Activesheet.PageSetup.Zoom = 100
Set rng = Windows(ActiveWorkbook.Name).VisibleRange
Set rng = rng.Resize(rng.Rows.Count - 1, rng.Columns.Count - 1)

With Activesheet
.ChartObjects(„Diagramm 1“).Top = .Rows(3).Top
.ChartObjects(„Diagramm 1“).Left = .Columns(1).Left
vDiff = .Columns(1).RowHeight
End With

With ActiveSheet.Shapes(„Diagramm 1“)
.Width = rng.Width
.Height = rng.Height - vDiff
End With

du hast recht.
das problem ist, dass sich der Name des Diagramms bei jeder Ausführung des makros ändert.
weißt du, wie ich den namen in meinem fall fest setzen kann?

Da bin ich leider überfragt.

Aber hast Du den mehrere Diagramme pro Mappe/Sheet?

Sonst eben eine Abfrage a la

For each MyShape in Shapes
 If MyShape.Name \> "" Then
 'Deine Aktion
 end if
Next

Versuch dich mal. Bin z.Z. stark eingespannt und kann daher keinen lauffähigen Code liefern, nur Tipps.

Hallo Eugen,

mit folgenden Ergänzungen kannst du das Diagramm an deine Wunschposition verschieben

Gruß
Franz

Sub AaTest()
 Dim rngZelle As Range, objShape As Shape
 With ActiveSheet
 'in dieser Zelle soll die linke obere Ecke des Diagramms plaziert werden
'fest vorgegeben
 Set rngZelle = ActiveSheet.Range("F15")
'oder variabel in Zelle die vor Start des Makros selektiert wird
 Set rngZelle = ActiveCell

 i = .Cells(.Rows.Count, 4).End(xlUp).Row 'Zeile zum Testen von mir eingebaut
 End With
 ActiveSheet.Shapes.AddChart.Select
 Set objShape = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
 ActiveChart.SetSourceData Source:=Range("D15:E" & i)
 ActiveChart.ChartType = xlLine
 ActiveChart.ChartArea.Width = 660
 ActiveChart.ChartArea.Height = 500
 With objShape
 'mit den Werten nach Top und Left kann man die Positon noch etwas feinjustieren
 .Top = rngZelle.Top + 0
 .Left = rngZelle.Left + 0
 End With
 Set rngZelle = Nothing: Set objShape = Nothing
End Sub

Sorry,
da kann ich leider nicht helfen.

Gruß,
Ptonka