juri61
Goto Top

Diagramme mit Macro platzieren

Hi,

erstmal ein Frohes Neues Jahr an alle.

Zur Frage:
Ich möchte Diagramme in Excel über ein Macro erstellen und platzieren. Das Erstellen klappt inzwischen gut, das platzieren leider überhaupt nicht. Alle Versuche ein entsprechendes Makro aufzunehmen und den Code dann entsprechend anzupassen, haben nicht geholfen.

Hat jemand eine Idee und/oder ein funktionierendes Stück Code?

Danke.
Juryk

Content-Key: 47801

Url: https://administrator.de/contentid/47801

Printed on: April 16, 2024 at 15:04 o'clock

Member: bastla
bastla Jan 03, 2007 at 10:16:53 (UTC)
Goto Top
Hallo juri61!

Das könnte etwa so gehen:
With ActiveSheet
    .ChartObjects(1).Left = .Columns("D").Left  
    .ChartObjects(1).Top = .Rows(8).Top
End With

Grüße
bastla
Member: juri61
juri61 Jan 04, 2007 at 17:25:09 (UTC)
Goto Top
Hallo Bastla,

danke schon mal für die Hilfe, leider ist das noch nicht ganz des Pudels Kern. Mein fertiges Makro soll etwa so aussehen:

 For leg = 0 To numLegs

        Charts.Add
        With ActiveChart
            .Name = plname
            .ChartType = xlXYScatterLinesNoMarkers
             .SetSourceData Source:= _
                Worksheets(wsindex).Range(dataLeft, dataRight), _
                PlotBy:=xlColumns
            .Location Where:=xlLocationAsObject, Name:="Plots"  
        End With

       chartID = ActiveChart.Index
                
        With ActiveSheet
            .ChartObjects(chartID).Left = .Columns("D").Left  
            .ChartObjects(chartID).Top = .Rows(8).Top
        End With

End For

Das heißt, ich erzeuge die Plots in einer Schleife und will den nächsten Plot immer neben/unter dem vorhergehenden erzeugen.
Wie komme ich an die Nummer des Charts, mit der ich den entsprechenden Plot als ChartObject ansprechen kann. Meine Variable chartID, so wie ich sie verwendet habe, funktioniert nicht. Wo stehe ich auf dem Schlauch?

Danke und Gruß
Juryk
Member: bastla
bastla Jan 04, 2007 at 19:48:54 (UTC)
Goto Top
Hallo juri61!

Du könntest einfach die Count-Eigenschaft der ChartObjects-Auflistung verwenden (da Du ja das zuletzt hinzugefügte Diagramm platzieren willst):
With ActiveSheet
    .ChartObjects(.ChartObjects.Count).Left = .Columns("D").Left  
    .ChartObjects(.ChartObjects.Count).Top = .Rows(8).Top
End With
Alternativ dazu gäbe es noch eine ChartObjects.Add-Methode, der Du die Position mitgeben kannst (siehe Hilfe zur ChartObjects-Auflistung) - habe ich aber noch nicht ausprobiert.

Grüße
bastla
Member: juri61
juri61 Jan 05, 2007 at 07:50:01 (UTC)
Goto Top
Hi Bastla,

With ActiveSheet
     .ChartObjects(.ChartObjects.Count).Left= .Columns("D").Left  
     .ChartObjects(.ChartObjects.Count).Top =.Rows(8).Top
 End With
 


Gibt bei mir leider nur Typen unverträglich.? Hast du da noch eine Idee?

Mit ChartObjects.Add bin ich gerade am experimentieren. Hat aber noch keinen Erfolg.

Gruß
Juryk
Member: bastla
bastla Jan 05, 2007 at 08:03:50 (UTC)
Goto Top
Hallo juri61!

Stell versuchsweise vor diese 4 Zeilen ein
ActiveWindow.Visible = False

Grüße
bastla
Member: juri61
juri61 Jan 05, 2007 at 08:57:56 (UTC)
Goto Top
Hi Bastla,

danke für den Tip. Muss ich bei Gelegenheit auch mal testen.

Habe mich fur die ChartObjecs.Add Methode entschieden. Das sieht dann ungefähr so aus:
 Set plt = Sheets("Plots").ChartObjects.Add(pLeft, pTop + leg * pOff, pWidth, pHeight)  
        
        pltID = plt.Index
        Sheets("Plots").ChartObjects(pltID).Activate  
            
        With ActiveChart
            .ChartType = xlXYScatterLinesNoMarkers
            .SetSourceData Source:= _
                Worksheets(wsindex).Range(dataLeft, dataRight), _
                PlotBy:=xlColumns
            .Location Where:=xlLocationAsObject, Name:="Plots"  
        End With

Danke und Gruß
Juryk