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

Ausgedruckt am: 28.03.2024 um 12:03 Uhr

Mitglied: bastla
bastla 03.01.2007 um 11:16:53 Uhr
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
Mitglied: juri61
juri61 04.01.2007 um 18:25:09 Uhr
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
Mitglied: bastla
bastla 04.01.2007 um 20:48:54 Uhr
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
Mitglied: juri61
juri61 05.01.2007 um 08:50:01 Uhr
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
Mitglied: bastla
bastla 05.01.2007 um 09:03:50 Uhr
Goto Top
Hallo juri61!

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

Grüße
bastla
Mitglied: juri61
juri61 05.01.2007 um 09:57:56 Uhr
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