Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Diagramm in VBA

Betrifft: Diagramm in VBA von: Monika
Geschrieben am: 23.10.2014 10:13:03

Hallo,
ich bin gerade dabei ein Makro zu erstellen, dass auch ein Diagramm einfügt. Nun stehe ich vor dem Problem, dass ich 2 Kurven einfügen möchte. Eine bekomme ich ohne Probleme hin, aber bei der zweiten muss ich etwas falsch machen, da hagelt es Fehlermeldungen oder komische Kurven. Wie kann ich in den folgenden Code (oder in einen leicht abgewandelten) eine zweite Kurve in dasselbe Diagramm einbringen?

Über eine Antwort freue ich mich sehr.
LG
Monika

'Diagramm Kraft-Verlängerungsdiagramm erstellen
Range("P3").Select()
ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select()
ActiveChart.SeriesCollection.NewSeries()
'Erstellen Kurve "Längenänderung". Auswahl der Werte Beginn bei Kraft 5 N, Ende am Ende der Werte
ActiveChart.FullSeriesCollection(1).Name = _
"=""Längenänderung fein"""
ActiveChart.FullSeriesCollection(1).XValues = _
ActiveSheet.Range("F" & Range("O16").Value & ":F" & Range("O17").Value)
ActiveChart.FullSeriesCollection(1).Values = _
ActiveSheet.Range("D" & Range("O16").Value & ":D" & Range("O17").Value)

With ActiveChart
.HasLegend = True 'Legende hinzufügen
.HasTitle = True 'Titel
.ChartTitle.Characters.Text = "Kraft-Verlängerungs-Diagramm"
.Axes(xlCategory, xlPrimary).HasTitle = True 'x-Achsenbeschriftung
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Längenänderung [mm]"
.Axes(xlValue, xlPrimary).HasTitle = True 'y-Achsenbeschriftung
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Kraft genullt [N]"
End With

  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 23.10.2014 10:28:33

Hi Monika,

ich würde es so machen:

'Diagramm Kraft-Verlängerungsdiagramm erstellen
With ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Chart
    ' 1. Datenreihe
    With .SeriesCollection.NewSeries
        'Erstellen Kurve "Längenänderung". Auswahl der Werte Beginn bei Kraft 5 N, Ende am Ende  _
der Werte
        .Name = "Längenänderung fein"
        .XValues = ActiveSheet.Range("F" & Range("O16").Value & ":F" & Range("O17").Value)
        .Values = ActiveSheet.Range("D" & Range("O16").Value & ":D" & Range("O17").Value)
    End With
    ' 2. Datenreihe, Achtung, Zellbereiche anpassen!!
    With .SeriesCollection.NewSeries
        'Erstellen Kurve .....
        .Name = "......"
        .XValues = ActiveSheet.Range("F" & Range("O16").Value & ":F" & Range("O17").Value)
        .Values = ActiveSheet.Range("D" & Range("O16").Value & ":D" & Range("O17").Value)
    End With
    .HasLegend = True 'Legende hinzufügen
    .HasTitle = True 'Titel
    .ChartTitle.Characters.Text = "Kraft-Verlängerungs-Diagramm"
    .Axes(xlCategory, xlPrimary).HasTitle = True 'x-Achsenbeschriftung
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Längenänderung [mm]"
    .Axes(xlValue, xlPrimary).HasTitle = True 'y-Achsenbeschriftung
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Kraft genullt [N]"
End With



  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 23.10.2014 14:46:28

Hallo Beverly,
cool, danke. Das ist ja richtig simpel :-D Gewusst wie ;-)
Allerliebste Grüße
Monika


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 23.10.2014 14:59:25

Weißt du zufällig auch wie ich jetzt eine Trendlinie einfüge? Mit meiner üblichen Schreibweise will es wohl wegen des "With" nicht mehr.

  'Trendlinie für E-Modulkurve anlegen. Fortsetzen um 1mm
    ActiveChart.FullSeriesCollection(1).Trendlines.Add
    ActiveChart.FullSeriesCollection(1).Trendlines(1).Select
    Selection.Forward = 1
    Selection.DisplayEquation = True



  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 23.10.2014 15:40:15

Hi Monika,

ich habe es jetzt nicht getestet, aber versuche es mal nach diesem Prinzip:

     With .SeriesCollection.NewSeries
         'Erstellen Kurve .....
         .Name = "......"
         .XValues = ActiveSheet.Range("F" & Range("O16").Value & ":F" & Range("O17").Value)
         .Values = ActiveSheet.Range("D" & Range("O16").Value & ":D" & Range("O17").Value)
         .Trendlines.Add
         With .Trendlines(1)
            .Forward = 1
            .DisplayEquation = True
        End With
     End With

GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 23.10.2014 16:59:33

Wow, funktioniert einwandfrei. Genial! Danke :-)


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 23.10.2014 19:12:55

Hi, ich nochmal...

Irgendwie komme ich mit dem "With" nicht so richtig klar.
Wie kann ich denn das jetzt einfügen?

      Range("O3").Formula = ActiveChart.SeriesCollection(2).Trendlines(1).DataLabel.Text



  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 23.10.2014 20:13:48

Hi Monica,

innerhalb der With-Anweisung schreibst du nur das, was hinter dem With steht - in deinem Fall müsstst du deshalb den fett markierte Teil weglassen:

ActiveChart.SeriesCollection(2).Trendlines(1).DataLabel.Text


Dein Code müsste dann also so aussehen:

        With .Trendlines(1)
            .Forward = 1
            .DisplayEquation = True
            Range("O3").Formula = .DataLabel.Text
        End With

GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 27.10.2014 11:24:46

Jetzt wird es komisch. Wenn ich deine Variante mit F8 ausprobiere, funktioniert sie einwandfrei. Wenn ich F5 verwende, wird die Formel nicht ausgelesen. Woran kann das liegen?


  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 27.10.2014 11:51:00

Hi Monika,

wird sie tatsächlich nicht in die Zelle geschrieben oder steht sie in O3 und ist nur am Bildschirm nicht sichtbar? Letzteres Phänomen habe ich auch immer mal - dann hilft bei mir, die Mappe schließen (speichern) und wieder öffnen.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 28.10.2014 15:11:03

Nein, in O3 steht leider wirklich nichts. Weder mit Schließen udn Öffnen und auch ein Befehl, der mir den Inhalt ausgeben soll, zeigt nichts.

Hier vielleicht nochmal der Code. Mit F8 funktioniert es weiterhin, mit F5 nicht :-(

Range("AB20").Select

'Diagramm Kraft-Verlängerungsdiagramm erstellen
With ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Chart
    
    ' 1. Datenreihe
    With .SeriesCollection.NewSeries
        'Erstellen Kurve "Längenänderung". Auswahl der Werte Beginn bei Kraft 5 N, Ende am Ende  _
_
der Werte
        
        .Name = "Längenänderung"
        .XValues = ActiveSheet.Range("F" & Range("O16").Value & ":F" & Range("O17").Value)
        .Values = ActiveSheet.Range("D" & Range("O16").Value & ":D" & Range("O17").Value)
    End With
    ' 2. Datenreihe, Achtung, Zellbereiche anpassen!!
    With .SeriesCollection.NewSeries
        'Erstellen Kurve .....
        .Name = "EModul"
        .XValues = ActiveSheet.Range("F" & Range("O16").Value & ":F" & Range("O19").Value)
        .Values = ActiveSheet.Range("D" & Range("O16").Value & ":D" & Range("O19").Value)
      'Trendlinie für E-Modulkurve anlegen. Fortsetzen um 1mm
         .Trendlines.Add
         With .Trendlines(1)
            .Forward = 1
            .DisplayEquation = True
             Range("O3").Formula = .DataLabel.Text
         End With
       
        
    End With
    .HasLegend = True 'Legende hinzufügen
        With .Legend
        .Height = 10
             .Top = 200
            .Left = 0
             .Width = 350
           
     End With
        With .PlotArea
            .Width = 300
            .Height = 160
            .Top = 20
        End With
         With .ChartArea
            .Top = Range("N21").Top
            .Left = Range("N21").Left
            .Width = 244
            .Height = 196
        End With
    .HasTitle = True 'Titel
    .ChartTitle.Characters.Text = "Kraft-Verlängerungs-Diagramm"
    .Axes(xlCategory, xlPrimary).HasTitle = True 'x-Achsenbeschriftung
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Längenänderung [mm]"
    .Axes(xlValue, xlPrimary).HasTitle = True 'y-Achsenbeschriftung
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Kraft genullt [N]"
    End With
  



  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 28.10.2014 15:18:29

Dann lade doch mal deine Mappe hoch.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 29.10.2014 08:40:10

https://www.herber.de/bbs/user/93435.xlsm


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 29.10.2014 08:40:37

Hi,
hier ist die Version, in der ich F5 gedrückt habe:
In Makro2 gibt es ein Sub entscheidenerTeil. Dort wird nur das Diagramm eingefügt und die Trendlinie ausgelesen.
Das komplette Makro ist dadrunter.
Hoffentlich steigst du durch...
LG
Moni


  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 29.10.2014 09:06:53

Hi Moni,

hängt wohl damit zusammen, das der Code schneller durchläuft als Excel reagieren kann, da es im Einzelschrittmodus ja funktioniert. Die einzige Lösung, die ich im Augenblick sehe ist, dass man die Zelle vorher selektiert und damit den Code "verlangsamt"

                    Range("O3").Select
                    Range("O3").Formula = .DataLabel.Text

GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 29.10.2014 12:55:26

Mmh, reicht leider immer noch nicht. Habe jetzt 3 verschiedene Range.Select Funktionen davor gesetzt und es klappt dennoch nicht. Gibt es einen Befehl, der den Code verlangsamt? Hört sich irgendwie blöd an^^ Aber ich finde im Internet nichts dazu.

Oder siehst du eine andere Stelle, an der die Trendlinie besser ausgelesen werden könnte? In dem "With"-Bereich ist es vermutlich überall zu schnell, aber ich wüsste nicht wie ich das Diagramm aktivieren kann ohne den direkten Namen zu nennen. Kann man das zuletzt erstellte Diagramm aktivieren oder so? Ich habe leider noch andere Diagramme mit drin...


  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 29.10.2014 13:02:08

Hmm, bei mir hat es funktioniert. Andere Variante - lösche die beiden Zeilen und schreibe stattdessen vor End Sub diese Zeile:

    Range("O3").Formula = ActiveSheet.ChartObjects(1).Chart.SeriesCollection("EModul"). _
Trendlines(1).DataLabel.Text

GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 29.10.2014 13:17:31

Hat das bei dir funktionert? Bei mir sagt er "ungültiger Parameter"

Grmpf. Du gibst so tolle Tipps und dennoch will ich meinen PC nur noch aus dem Fenster werfen. Furchtbar^^


  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 29.10.2014 13:26:25

Selbstverständlich hat es bei mir funktioniert. Heißt bei dir die Datenreihe mit der Trendlinie vielleicht anders als "EModul"?


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Diagramm in VBA von: Monika
Geschrieben am: 29.10.2014 17:37:01

Tausend Dank für deine Geduld. Mein ChartObjekt im anderen Datenblatt war nicht die 1, sondern die 4.

Vielleicht noch eine Frage zum krönenden Abschluss, kann ich das Diagramm auch über den Namen ansprechen, den ich ihm gegeben habe, also "Kraft-Verlängerungs-Diagramm"?


  

Betrifft: AW: Diagramm in VBA von: Beverly
Geschrieben am: 29.10.2014 18:49:05

Selbstverständlich - anstelle ChartObjects(1) eben dieses: ChartObjects("Kraft-Verlängerungs-Diagramm")


GrußformelBeverly's Excel - Inn


 

Beiträge aus den Excel-Beispielen zum Thema "Diagramm in VBA"