Office: Diagramm mit VBA erstellen und formatieren

Helfe beim Thema Diagramm mit VBA erstellen und formatieren in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen. Ich habe ein Problem und hoffe jemand kann mir helfen. Es geht um folgendes: Ich habe zwei Datenreihen und eine Reihe für die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von pandalein, 21. April 2009.

  1. pandalein Neuer User

    Diagramm mit VBA erstellen und formatieren


    Hallo zusammen.

    Ich habe ein Problem und hoffe jemand kann mir helfen. Es geht um folgendes:

    Ich habe zwei Datenreihen und eine Reihe für die x-Werte. Anhand von VBA möchte ich nun ein Diagramm erstellen und formatieren.
    Durch aufzeichenen von Makros bin ich nun schon soweit, dass ich das Diagramm mit 2. Achse erhalte. Ich möchte nun aber noch andere Formatierungen vornehmen, wie trendlinie einfügen.
    Ich habe auch versucht dies aufzuzeichnen. Aber das problem ist, im code wird das Diagramm nun neu aktiviert.

    ActiveSheet.ChartObjects("Diagramm 1").Activate

    Aber wenn ich das über VBA automatisch laufen lassen will, weiß ich nicht wie das Diagramm heißt.
    Gibt es eine Möglichkeit, das Diagramm mittels Makros umzubennen oder herauszufinden wie es heißt?
    Ich freue mich über Antworten.
    Vielen Dank.

    Pandalein
     
    pandalein, 21. April 2009
    #1
  2. miriki Erfahrener User
    Ich hab's noch nicht ausprobiert, aber wenn sich die ChartObjects-Kollektion genauso wie die Worksheets-Kollektion verhält, dann kannst Du mal in folgende Richtung probieren:

    Wenn Du ein ChartObject erstellst, müßte es "hinten an" gehängt werden und somit die höchste Nummer erhalten. Mit .Count könntest Du es dann direkt, also nicht über den Namen, ansprechen. Und dann könntest du ihm über den numerischen Index und die .Name Eigenschaft einen definierten Namen geben, über den Du es dann weiterhin ansprechen kannst.

    Also bei Worksheets würde es so aussehen:
    Code:
    worksheets.add after:=worksheets.count
    worksheets(worksheets.count).name="neues blatt"
    [...]
    worksheets("neues blatt").cells(1,1).value="hallo, welt!"
    alternativ ließe sich das noch etwas verkürzen, je nachdem, wie Dein Code zum Diagramm-Erstellen aussieht:
    Code:
    dim w as worksheet
    set w=worksheets.add(after:=worksheets.count)
    w.name="neues Blatt"
    [...]
    w.cells(1,1).value="hallo, welt!"
    Auch das alles jetzt ungetestet, aber so oder sehr ähnlich müßte es funktionieren und ich denke, auch sehr ähnlich bei Diagrammen aussehen.

    Und wie oben zu sehen: Mit einer Objekt-Variablen (set...) kannst Du dir die ganze Sache mit dem Index (Name oder numerisch) gleich ganz sparen. Vielleicht ist das auch einen Ansatz wert...

    Gruß, Michael
     
    miriki, 21. April 2009
    #2
  3. pandalein Neuer User
    Hallo.
    Danke für deine Tipps.
    ich habe es auf beiden Wegen versucht.

    Code:
    Dim test As Chart
    Set test = ActiveWorkbook.Charts.Add
    test.ChartType = xlXYScatter
    test.Activate
    ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Messzeit in min"
    
    Die letzte Zeile (s.o.) funktioniert dann aber leider nicht mehr. Das Diagramm wurde als extra Blatt eingefügt und mit test.activate wird bloß das Blatt ausgewählt, aber nicht das Diagramm. (Mit select klappt es auch nicht)

    und auch über die andere Variante habe ich es leider auch nicht geschafft:
    Code:
    ActiveWorkbook.Charts.Add after:=Worksheets(Worksheets.Count)
    Charts(Charts.Count).Name = "neues blatt1"
    ActiveChart.ChartType = xlXYScatter
    ActiveSheet.ChartObjects("neues blatt1").Activate
    Das Diagramm wird dabei auch immer als ein extra Datenblatt eingefügt. Das Blatt heißt dann "neues blatt1". Auch in den Diagrammeigenschaften wird dieser Name aufgeführt (da stand sonst auch immer Diagramm x). Aber das aktivieren klappt nicht, weil das Objekt nicht gefunden wird. :lol:
    Ich habe das aktivieren dann mal aufgezeichnet und das diagramm heißt in vba nicht so wie ich es genannt habe, sondern wie üblich "Diagramm &ne Zahl".

    Habe ich noch was falsch gemacht, oder kann man es nicht umbennen (Fehler ? ich habe 2007)?
    Ich muss das Diagramm aktivieren um noch bestimmte Formatierungen vorzunehmen. Dabei ist der Diagrammname nicht bekannt.

    Ich habe schon überlegt mit einer Schlafe zu überprüfen ob Diagramm 1, Diagramm 2 ... vorhanden sind und wenn Diagramm x vorhanden ist aktiviere ich es. Aber das wäre eigentlich nur eine Notlösung. Außerdem habe ich auch noch nicht rausgefunden, wie ich überprüfen kann ob Diagramm x da ist. :roll:

    Ich wäre echt froh für jede Hilfe.

    Grüße Pandalein
     
    pandalein, 24. April 2009
    #3
  4. Exl121150 Erfahrener User

    Diagramm mit VBA erstellen und formatieren

    Hallo Pandalein,

    man muss bei den Diagrammen 2 unterschiedliche Situationen im Auge haben:
    1) Die Erstellung eines separaten Diagrammblattes (Mitglied der Auflistung der Arbeitsblätter)
    2) Die Erstellung eingebetteter Diagramme in einem bestimmten Arbeitsblatt.

    Ich beziehe mich im Folgenden auf die Erstellung eingebetteter Diagramme in einem einzelnen Arbeitsblatt:
    1) Man muss sich für ein bestehendes Arbeitsblatt entscheiden: über seine Nr., über seinen Namen oder einfach für das aktive Blatt
    2) Diesem Blatt muss man ein Mitglied der ChartObjects-Auflistung hinzufügen. Dieses stellt einfach den Container (optisch: die Umrandung bzw. das Grafik-Fenster) zur Verfügung. An Parametern benötigt es die linke obere Ecke und die Breite und Höhe.
    Diesem Container kann man statt der Nummer auch einen Namen zuweisen, der dann links neben der Formel-Editierzeile erscheint (statt des Standardnamens).
    3) Im Container selbst ist im Prinzip dann genau das Gleiche enthalten, das auch in einem separaten Diagrammarbeitsblatt auch enthalten wäre: nämlich das Chart-Objekt.
    In diesem Fall besitzt das ChartObject-Objekt eine Eigenschaft namens 'Chart', die auf dieses Chart-Objekt zeigt.
    4a) Man kann dann die ChartType-Eigenschaft festlegen; ferner den Datenbereich für die x-Werte und für mehrere y-Wertereihen (falls man es so will).
    4b) Man kann aber auch für jede y-Wertereihe separate Eigenschaften festlegen über die jeweilige 'SeriesCollection'-Auflistung: mein Beispiel zeigt bei jeder Datenreihe die y-Werte an (.HasDataLabels=True) und die Legendenbeschriftung (.Name="2007" bzw. "2008"). Oder man kann zB. mittels Eigenschaft .Formula oder .FormulaLocal die Datenbereiche des Arbeitsblattes festlegen (bei mir nur als Kommentar).

    Ich glaube, man kann schon am folgenden Musterbeispiel erkennen, wie das Ganze funktioniert.



    Code:
    Sub Makro2()
    
        Dim Ws As Worksheet
        Dim oChrt As ChartObject
        Dim Chrt As Chart
        
        Set Ws = ActiveSheet
        Set oChrt = Ws.ChartObjects.Add(50, 200, 300, 200)
        With oChrt
          .Name = "StromDiagramm"
          With .Chart
            .ChartType = xlColumnClustered
            .SetSourceData Source:=Range("Tabelle1!$A$2:$C$13")
            With .SeriesCollection(1)
              .HasDataLabels = True
              .Name = "2007"
            End With
            With .SeriesCollection(2)
              .HasDataLabels = True
              .Name = "2008"
              '.FormulaLocal = "=DATENREIHE(Tabelle1!$C$1;Tabelle1!$A$2:$A$13;Tabelle1!$C$2:$C$13;2)"
            End With
            .HasLegend = True
          End With
        End With
    End Sub
     
    Exl121150, 25. April 2009
    #4
  5. Exl121150 Erfahrener User
    Hallo Pandlein,

    will man statt in ein Arbeitsblatt eingebetteter Diagramme lieber ein eigenes Diagrammarbeitsblatt (mit einem eigenen Tabulator bei den Arbeitsblatt-Tabs), dann würde voriges Musterbeispiel so lauten:
    Code:
    Sub Makro3()
        Dim Ws As Worksheet
        Dim oChrt As ChartObject
        Dim Chrt As Chart
    
        Set Chrt = ActiveWorkbook.Sheets.Add(After:=Worksheets(Worksheets.Count), Type:=xlChart)
        With Chrt
          .Name = "StromDiagramBlatt"
          .ChartType = xlColumnClustered
          .SetSourceData Source:=Range("Tabelle1!$A$2:$C$13")
          With .SeriesCollection(1)
            .HasDataLabels = True
            .Name = "2007"
          End With
          With .SeriesCollection(2)
            .HasDataLabels = True
            .Name = "2008"
            '.FormulaLocal = "=DATENREIHE(Tabelle1!$C$1;Tabelle1!$A$2:$A$13;Tabelle1!$C$2:$C$13;2)"
          End With
          .HasLegend = True
        End With
    End Sub
    Wie man sieht, gibt es keine Container-Objektauflistung mehr, sondern es wird gleich eine neues Blatt generiert (allerdings nicht vom Objekttyp 'Worksheet', sondern vom Typ 'Chart').
    Die Benamsung des Tabulators erfolgt über die .Name-Eigenschaft. Es ist alles völlig identisch zum vorigen Beispiel (nur eben ohne ChartObjects(n)-Auflistung.
     
    Exl121150, 25. April 2009
    #5
  6. Exl121150 Erfahrener User
    Hallo Pandalein,

    ich entnehme Deinen Bemerkungen, dass Du eigentlich eingebettete Diagramme haben möchtest.
    Um in diesem Fall festzustellen, welche Diagrammbezeichnung zu einem bestimmten Diagramm gehört, ist es wichtig, bei der Erzeugung des Diagrammcontainers nicht auf den zurückgegebenen Objektzeiger zu verzichten.
    Also:

    Dim Ws As WorkSheet, oChrt As ChartObject
    Set Ws = ActiveSheet
    Set oChrt = Ws.ChartObjects.Add(50, 200, 300, 200)

    Dann kann man ohne Probleme auf diese Objektinstanz zugreifen (schreibend oder lesend oder ausführend):
    oChrt.Name="StromDiagramm" oder If oChrt.Name="StromDiagramm" then .... oder oChrt.Activate
     
    Exl121150, 25. April 2009
    #6
  7. pandalein Neuer User
    Hallo.
    Danke für Deine Unterstützung.
    Es klappt jetzt :-D .
    Schönen Sonntag noch.
    Pandalein
     
    pandalein, 26. April 2009
    #7
Thema:

Diagramm mit VBA erstellen und formatieren

Die Seite wird geladen...
  1. Diagramm mit VBA erstellen und formatieren - Similar Threads - Diagramm VBA erstellen

  2. Diagramm mit VBA erstellen und bearbeiten

    in Microsoft Access Hilfe
    Diagramm mit VBA erstellen und bearbeiten: Hallo, ich habe von Access 2007 auf Access 2013 umgestellt. Zum erstellen und bearbeiten eines Diagramms über VBA in ACCESS 2013: Dim objChart As Chart wird nicht erkannt, obwohl die Microsoft...
  3. Dynamisches Diagramm in Access-VBA erstellen

    in Microsoft Access Hilfe
    Dynamisches Diagramm in Access-VBA erstellen: Hallo, habe eine Tabelle, die in etwa (vereinfacht) folgendermaßen aussieht: X | A | B | C ----------------- ... | 3 | 9 | 1 ... | 2 | 8 | 2 ... | 3 | 9 | 1 ... |...
  4. Diagramm über Werteliste per Makro erstellen

    in Microsoft Excel Hilfe
    Diagramm über Werteliste per Makro erstellen: Ich versuche per Makro ein Diagramm zu erstellen. Ich möchte die Werte der Kurve direkt als Liste in das Diagramm schreiben und nicht über einen Bezug auf einen Tabellenbereich. Ich habe für...
  5. Diagramm erstellen und Datenausgabe

    in Microsoft Excel Hilfe
    Diagramm erstellen und Datenausgabe: Hallo, ich brauche dringende Hilfe in VBA. Undzwar habe ich eine Tabelle besteht aus mehreren Zeilen und Spalten und die Tabelle wird je nach Schrittweite größer, ich möchte aber dass die Ausgabe...
  6. xlSheetType bei Erstellen von Diagrammen per VBA

    in Microsoft Excel Hilfe
    xlSheetType bei Erstellen von Diagrammen per VBA: Hallo, ich möchte mehrere Sheets aus einem Arbeitsblatt in ein neues kopieren. Dieses wird dann gespeichert und geschlossen - zur Archivierung. Die mitkopierten Diagramme (per VBA erstellt)...
  7. Diagramme erstellen und drucken über Button

    in Microsoft Excel Hilfe
    Diagramme erstellen und drucken über Button: Guten Morgen alle zusammen, ich bin gerade dabei mich das erste mal richtig mit Excel auseinanderzusetzen. Ich habe nun in meinem Betrieb ein Projekt bekommen in welchem Werkzeugbrüche...
  8. Access Pivot Diagramm Erstellung per VBA mit 2 Skalierungen auf der X Achse

    in Microsoft Access Hilfe
    Access Pivot Diagramm Erstellung per VBA mit 2 Skalierungen auf der X Achse: Hallo, ich möchte in Access 2007 ein Pivot Diagramm per VBA erstellen. Die Schwierigkeit dabei ist, dass die X-Achse zwei Skalierungen haben soll, als Haup und Unterkategorie. Im Web kann ich...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden