Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Automatische Diagrammerstellung

Automatische Diagrammerstellung
11.10.2016 13:37:00
Tim
Hallo und wieder müss ich mein Makro erweitern und eine automatische Diagrammerstellung. Das klappt auch soweit super ABER ich bekomme xlDown nicht in die Range Methode integriert.
' Diagramme
WB.Worksheets.Add After:=WB.Sheets(Sheets.Count)
Sheets("Tabelle2").Select
Sheets("Tabelle2").Name = "Diagramme"
Range("B1").Select
ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Select
ActiveSheet.Shapes("Diagramm 1").IncrementLeft -345.75
ActiveSheet.Shapes("Diagramm 1").IncrementTop -105.75
ActiveSheet.Shapes("Diagramm 1").ScaleWidth 2.5625, msoFalse, _
msoScaleFromTopLeft
ActiveChart.SetSourceData Source:=wksXLS. _
Range("A6:Q100")
ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Select
ActiveSheet.Shapes("Diagramm 2").IncrementLeft -345.75
ActiveSheet.Shapes("Diagramm 2").IncrementTop 120.75
ActiveSheet.Shapes("Diagramm 2").IncrementLeft 1.5
ActiveSheet.Shapes("Diagramm 2").IncrementTop -0.75
ActiveSheet.Shapes("Diagramm 2").ScaleWidth 2.5645833333, msoFalse, _
msoScaleFromTopLeft
ActiveChart.SetSourceData Source:=wksLOG.Range( _
"A2:A100,C2:C100")
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
Selection.Caption = "Zeit [hh:mm:ss]"
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
' Selection.Caption = "Temperatur [°C]"
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.PlotArea.Select
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
Selection.Caption = "Zeit [hh:mm:ss]"
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
' Selection.Caption = "Sauerstoffkonzentration [%]"
Range("A18").Select

Außerdem bekomme ich eine Fehlermeldung bei den Y-Achsen Beschriftungen, wobei diese auch mit dem Makro Recorder aufgenommen worden sind.
Vielen Dank für euren Support
LG Tim

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatische Diagrammerstellung
11.10.2016 14:23:21
Rudi
Hallo,
wksXLS.Range(wksXLS.Range("A6"),wksXLS.Range("Q6").End(xldown))
Gruß
Rudi
AW: Automatische Diagrammerstellung
11.10.2016 14:50:12
Beverly
Hi Tim,
versuche es mal so:
Dim lngLetzte1 As Long
Dim lngLetzte2 As Long
lngLetzte1 = IIf(IsEmpty(wksXLS.Cells(Rows.Count, 1)), _
wksXLS.Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
lngLetzte2 = IIf(IsEmpty(wksLOG.Cells(Rows.Count, 1)), _
wksLOG.Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Worksheets.Add After:=Sheets(Sheets.Count)
With Worksheets(Worksheets.Count)
.Name = "Diagramme"
With .Shapes.AddChart2(332, xlLineMarkers).Chart
.SetSourceData Source:=wksXLS.Range("A6:Q" & lngLetzte1)
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = "Zeit [hh:mm:ss]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Temperatur [°C]"
End With
.ChartObjects(.ChartObjects.Count).Top = .Range("B5").Top
.ChartObjects(.ChartObjects.Count).Left = .Range("B1").Left
With .Shapes.AddChart2(332, xlLineMarkers).Chart
.SetSourceData Source:=wksLOG.Range("A6:A" & lngLetzte2, "C6:C" & lngLetzte2)
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = "Zeit [hh:mm:ss]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Sauerstoffkonzentration [%]"
End With
.ChartObjects(.ChartObjects.Count).Top = .Range("B20").Top
.ChartObjects(.ChartObjects.Count).Left = .Range("B1").Left
End With

Position der Diagramme musst du eventuell anpassen.


Anzeige
AW: Automatische Diagrammerstellung
12.10.2016 09:01:50
Tim
Danke euch Beiden. Wie kann ich den Befehl auf einzelne Spalten anwenden, also als Beispiel:
Beim wksLOG möchte ich nur die Spalten A3:AX und C3:CX, wobei X dann wieder die letzte Zeile wäre?
https://www.herber.de/bbs/user/108725.zip
Hier sind einmal die .LOG und die .XLS
Ich wäre euch sehr dankbar, wenn wir das auch noch packen.
LG
Tim
AW: Automatische Diagrammerstellung
12.10.2016 09:06:21
Beverly
Hi Tim,
das wird doch in dieser Zeile realisiert:
.SetSourceData Source:=wksLOG.Range("A6:A" & lngLetzte2, "C6:C" & lngLetzte2)


Anzeige
AW: Automatische Diagrammerstellung
12.10.2016 09:22:46
Tim
Hallo Karin,
leider scheint das nicht zu funktionieren. Ich habe hier einmal die "fertige" Excel nach Anwendung des Makros.
https://www.herber.de/bbs/user/108727.xlsx
Die Struktur finde ich super, das ist auch für ein Newbie nachvollziehbar.
LG
Tim
AW: Automatische Diagrammerstellung
12.10.2016 10:34:20
Beverly
Hi Tim,
mit deinen Daten solltest du nicht den Diagrammtyp xlLineMarkers (Liniendiagramm) verwenden sondern xlXYScatterLines (Punkt).


AW: Automatische Diagrammerstellung
13.10.2016 08:31:13
Tim
Hallo Karin,
leider wird der Typ "Linie" vorgeschrieben für meine Abschlussarbeit. Funktioniert deswegen der Befehl nicht oder woran liegt es?
LG
Tim
Anzeige
AW: Automatische Diagrammerstellung
13.10.2016 09:02:53
Beverly
Hi Tim,
ist der Diagrammtyp Linie vorgeschrieben oder ist ein Diagramm mit Punkten und Linie vorgeschrieben? Das ist ein wesentlicher Unterschied.
Weshalb der Code nicht funktioniert kann ich nicht sagen, weil
1. deine hochgeladene Mappe keinen Code beinhaltet
2. deshalb unbekannt ist ob es der gesamte Code ist
3. der Code in der Bezeichnung der Tabellenblätter nicht zu der Mappe passt


AW: Automatische Diagrammerstellung
13.10.2016 10:39:44
Tim
Guten Morgen,
ich versuche mal deine Fragen zu beantworten. Für die Arbeit ist ein Diagrammtyp ohne Punkte vorgeschrieben.
Ich lade dir mal das Makro, die "fertige Datei" und die Grunddaten hoch. https://www.herber.de/bbs/user/108750.zip
Ich habe dadruch, dass die Zeit in Sekunden dargestellt werden soll, das Problem, dass das Makro die Daten für die X-Achse nicht mehr erkennt. Hast du dafür auch noch einen Tipp?
LG
Tim
Anzeige
AW: Automatische Diagrammerstellung
13.10.2016 12:09:31
Beverly
Hi Tim,
welche Spalten sollen denn im Diagramm angezeigt werden? Die X-Werte sollen doch Spalte A sein oder sehe ich das falsch? Also sind deine Wertebereiche völlig falsch angegeben - vergleiche mal dazu meinen geposteten Code, bei dem Spalte A berücksichtigt ist. Aber du solltest schon mal für jedes Diagramm posten, welche Spalten dargestellt werden sollen, dann lässt sich der Code besser anpassen.


AW: Automatische Diagrammerstellung
13.10.2016 12:26:37
Tim
Hi Karin,
kein Problem. Du hast Recht zuvor war es Spalte A aber es hat sich etwas an den Wünschen des Betreuers verändert.
Messdaten Druck:
X-Achse: wsXLS Spalte B (der Header stimmt da noch nicht, ist aber in LabView angepasst)
Y-Achse: wsXLS Spalte Q, R
Messdaten Kühlwassertemperatur:
X-Achse: wsXLS Spalte B (der Header stimmt da noch nicht, ist aber in LabView angepasst)
Y-Achse: wsXLS Spalte C & P
Messdaten Gasmesszelle:
X-Achse: wsXLS Spalte B (der Header stimmt da noch nicht, ist aber in LabView angepasst)
Y-Achse: wsXLS Spalte K bis O
Messdaten Partikelkammer:
X-Achse: wsXLS Spalte B (der Header stimmt da noch nicht, ist aber in LabView angepasst)
Y-Achse: wsXLS Spalte F,G,H
Messdaten Sauerstoffkonzentration:
X-Achse: wsLOG Spalte C
Y-Achse: wsLOG Spalte D
Die wsXLS ist dahingehend schon angepasst. Ich habe nur noch keine Datei mit vielen Messwerten aber ich hänge hier mal eine kurze an. Dann passen auch die oben beschriebenen Graphen Spalten.
https://www.herber.de/bbs/user/108753.xls
LG
Tim
Anzeige
AW: Automatische Diagrammerstellung
13.10.2016 14:35:11
Beverly
Hi Tim,
Code ist genau auf deine Auflistung angepasst
lngLetzte1 = IIf(IsEmpty(wksXLS.Cells(Rows.Count, 1)), _
wksXLS.Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
lngLetzte2 = IIf(IsEmpty(wksLOG.Cells(Rows.Count, 1)), _
wksLOG.Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Worksheets.Add After:=Sheets(Sheets.Count)
With Worksheets(Worksheets.Count)
.Name = "Messdaten - Diagramme"
' Diagramm -> Partikelkammer
With .Shapes.AddChart2(332, xlXYScatterSmoothNoMarkers).Chart
.HasTitle = True
.ChartTitle.Text = "Messdaten Partikelkammer"
.SetSourceData Source:=Union(wksXLS.Range("B6:B" & lngLetzte1), wksXLS.Range("F6:H" &  _
lngLetzte1))
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = "Zeit [s]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Temperatur [°C]"
End With
.ChartObjects(.ChartObjects.Count).Top = .Range("B5").Top
.ChartObjects(.ChartObjects.Count).Left = .Range("B1").Left
.ChartObjects.Width = 850
' Diagramm -> O2
With .Shapes.AddChart2(332, xlXYScatterSmoothNoMarkers).Chart
.HasTitle = True
.ChartTitle.Text = "Messdaten Sauerstoffkonzentration"
.SetSourceData Source:=Union(wksLOG.Range("C2:C" & lngLetzte2), wksLOG.Range("D2:D" &  _
lngLetzte2))
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = "Zeit [s]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Sauerstoffkonzentration [%]"
End With
.ChartObjects(.ChartObjects.Count).Top = .Range("B20").Top
.ChartObjects(.ChartObjects.Count).Left = .Range("B1").Left
.ChartObjects.Width = 850
End With
Worksheets.Add After:=Sheets(Sheets.Count)
With Worksheets(Worksheets.Count)
.Name = "Versuchsstand - Diagramme"
' Diagramm -> Druck
With .Shapes.AddChart2(332, xlXYScatterSmoothNoMarkers).Chart
.HasTitle = True
.ChartTitle.Text = "Messdaten Druck"
.SetSourceData Source:=Union(wksXLS.Range("B6:B" & lngLetzte1), wksXLS.Range("Q6:R" &  _
lngLetzte1))
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = "Zeit [s]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Druck [mbar]"
End With
.ChartObjects(.ChartObjects.Count).Top = .Range("B5").Top
.ChartObjects(.ChartObjects.Count).Left = .Range("B1").Left
.ChartObjects.Width = 400
' Diagramm -> Kühlwassertemperatur
With .Shapes.AddChart2(332, xlXYScatterSmoothNoMarkers).Chart
.HasTitle = True
.ChartTitle.Text = "Messdaten Kühlwassertemperatur"
.SetSourceData Source:=Union(wksXLS.Range("B6:B" & lngLetzte1), wksXLS.Range("C6:C" &  _
lngLetzte1), wksXLS.Range("P6:P" & lngLetzte1))
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = "Zeit [s]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Temperatur [°C]"
End With
.ChartObjects(.ChartObjects.Count).Top = .Range("B20").Top
.ChartObjects(.ChartObjects.Count).Left = .Range("B1").Left
.ChartObjects.Width = 400
' Diagramm -> Gasmesszelle
With .Shapes.AddChart2(332, xlXYScatterSmoothNoMarkers).Chart
.HasTitle = True
.ChartTitle.Text = "Messdaten Gasmesszelle"
.SetSourceData Source:=Union(wksXLS.Range("B6:B" & lngLetzte2), wksXLS.Range("K6:O" &  _
lngLetzte2))
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = "Zeit [s]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Sauerstoffkonzentration [%]"
End With
.ChartObjects(.ChartObjects.Count).Top = .Range("B35").Top
.ChartObjects(.ChartObjects.Count).Left = .Range("B1").Left
.ChartObjects.Width = 850
End With

Beachte, dass deine Daten fehlerhaft sind, wodurch die Graphen "falsch" dargestellt werden.


Anzeige
AW: Automatische Diagrammerstellung
13.10.2016 15:32:14
Tim
Danke dafür habe ich eine Lösung gefunden! Formatiere das Achsenformat um, dann funktioniert es!
Vielen Dank. Ich hoffe ich brauch euch/dich erst einmal nicht mehr
Ganz liebe Grüße
Tim

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige