Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1852to1856
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

VBA Diagramm aus mehreren Worksheets

VBA Diagramm aus mehreren Worksheets
04.11.2021 11:05:48
Stephan
Guten Tag zusammen,
ich arbeite grad an einem Script welches folgenes machen soll:
Ich habe 3 Worksheets mit gleich formatierten Daten mit jeweils 5 Spalten. Innerhalb des Worksheets sind die Spalten gleichlang. Aber über verschiedene WS hinweg kann die Länge variieren.
Im letzten Worksheet "Diagramm" Sollen nun Graphen in EINEM Diagramm erstellt werden. Die DAten dazu kommen aus den anderen Worksheets.
Also:
Worksheet1 | Worksheet2 | Diagramm
Mein Script funktioniert auch bisher sehr gut. Das einzige was nicht funktionieren will ist dass alle Graphen in einem Diagramm landen. Ich bekomme immer pro Worksheet ein Diagramm.
Der Fehler müsste meiner Meinung nach irgendwo bei "With .SeriesCollection(1) " liegen welches in in die Schleife einbauen muss. Wenn ich aber statt der 1 eine Variable vergebe bricht der Code ab.
Hat jemand einen Tipp?
Danke,
viele Grüße
Hier eine Beispieldatei
https://www.herber.de/bbs/user/148940.xlsm
Hier der code

Sub DiagrammeAlleWorksheets()
' Makro10 Makro
Dim r_cnt As Integer 'row count
Dim c_cnt As Integer 'column count
Dim Datenzeile1 As Integer
Dim XSpalte As Integer
Dim ws As Worksheet
Dim wsName As String
Dim wsAnzahl As String
Dim NoWS As Integer         'Laufvariable Anzahl Worksheets in Schleife
Dim i As Integer
Dim lngReihe As Long
'Diagramme einfügen
'r_cnt = Cells(Rows.Count, 1).End(xlUp).Row 'Zeilenende suchen
Datenzeile1 = 2 'Diagrammstartzeile
XSpalte = 1
c_cnt = 2 'YSpalte
'Anzahl Worksheets im Workbook
wsAnzahl = ActiveWorkbook.Worksheets.Count
'Ab hier werden die Diagramme erstellt
i = 1
For NoWS = 1 To wsAnzahl - 1
Sheets(NoWS).Select
r_cnt = Cells(Rows.Count, 1).End(xlUp).Row 'Zeilenende suchen
With Sheets("Diagramm").Shapes.AddChart.Chart
.ChartType = xlXYScatterSmoothNoMarkers
If .SeriesCollection.Count > 0 Then
For lngReihe = .SeriesCollection.Count To 1 Step -1
.SeriesCollection(lngReihe).Delete
Next lngReihe
End If
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.Name = Sheets(NoWS).Name
.XValues = "=" & Sheets(NoWS).Name & "!" & Range(Cells(Datenzeile1, XSpalte), Cells(r_cnt, XSpalte)).Address
.Values = "=" & Sheets(NoWS).Name & "!" & Range(Cells(Datenzeile1, c_cnt), Cells(r_cnt, c_cnt)).Address
End With
End With
i = i + 1
'.HasLegend = False
Next
MsgBox i
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Diagramm aus mehreren Worksheets
04.11.2021 11:26:15
Beverly
Hi Stephan,

Sub DiaErstellen()
Dim wksTab As Worksheet
Dim lngLetzte As Long
With Worksheets("Diagramm")
With .Shapes.AddChart.Chart
.ChartType = xlXYScatterSmoothNoMarkers
If .SeriesCollection.Count > 0 Then
For lngzeile = .SeriesCollection.Count To 1 Step -1
.SeriesCollection(lngzeile).Delete
Next lngzeile
End If
For Each wksTab In Worksheets
If wksTab.Name  "Diagramm" Then
lngLetzte = wksTab.Cells(Rows.Count, 1).End(xlUp).Row
With .SeriesCollection.NewSeries
.XValues = wksTab.Range(wksTab.Cells(2, 1), wksTab.Cells(lngLetzte, 1))
.Values = wksTab.Range(wksTab.Cells(2, 2), wksTab.Cells(lngLetzte, 2))
End With
End If
Next wksTab
.HasLegend = False
End With
End With
End Sub

GrußformelBeverly's Excel - Inn
Anzeige
AW: VBA Diagramm aus mehreren Worksheets
05.11.2021 10:54:44
Stephan
Hallo Karin,
danke für die schnelle Hilfe. ich habe den Code unten nochmal kommentiert um sicherzugehen, dass ich alles verstanden habe.
Was mir noch nicht ganz klar ist warum bei mir immer zwei unabhängige Diagramme erstellt wurden. Muss ich nicht durch seriescollection(Variable) loopen sondern einfach immer eine neue Serie erstellen und davor sicherstellen dass sich keine weitere Serie auf dem Datenblatt befindet? Was wäre denn wenn ich zwei Diagramme mit Datenreihen füllen möchte? Müsste ich dann SeriesCollection(1) und (2) jeweils angeben?
Danke
viele Grüße
Stephan

Sub DiaErstellen()
Dim wksTab As Worksheet
Dim lngLetzte As Long
With Worksheets("Diagramm")
With .Shapes.AddChart.Chart
.ChartType = xlXYScatterSmoothNoMarkers 'Diagramm hinzugefügt auf Blatt "Diagramm"
If .SeriesCollection.Count > 0 Then     'Prüfe ob es auf dem Arbeitsblatt Datenserien gibt
For lngzeile = .SeriesCollection.Count To 1 Step -1 'Zähle rückwärts bis zur ersten Datenserie
.SeriesCollection(lngzeile).Delete              'Lösche die Datenserie
Next lngzeile
End If
For Each wksTab In Worksheets       'Ab hier für alle Worksheets durchführen
If wksTab.Name  "Diagramm" Then   'Prüfe ob wir uns NICHT im "Diagramm" Blatt befinden. Wenn das der Fall ist leg los
lngLetzte = wksTab.Cells(Rows.Count, 1).End(xlUp).Row   'finde letzte Zeile
'Ab hier füge dann die Datenreihen hinzu
With .SeriesCollection.NewSeries
.XValues = wksTab.Range(wksTab.Cells(2, 1), wksTab.Cells(lngLetzte, 1))
.Values = wksTab.Range(wksTab.Cells(2, 2), wksTab.Cells(lngLetzte, 2))
End With
End If
Next wksTab
.HasLegend = False
End With
End With
End Sub

Anzeige
AW: VBA Diagramm aus mehreren Worksheets
05.11.2021 12:30:39
Stephan
Hallo,
mir ist aufgefallen, dass auch noch der Name der Datenreihe fehlt. Dieser soll dem Namen des Worksheetnamen entsprechen. Wie würde ich das noch mit einbauen?
Danke,
Grüße
Stephan
AW: VBA Diagramm aus mehreren Worksheets
05.11.2021 14:56:03
Beverly
Hi Stephan,
wenn du deinen eigenen Code mal kommentieren würdest würde dir auffallen, dass deine äußere Schleife über alle Tabellenblätter läuft und innerhalb DIESER Schleife jeweils ein Diagramm (für jedes gerade durchlaufene Tabellenblatt) erstellt wird. Bei meinem Code wird das Diagramm ZUERST erstellt und DANACH über alle Tabellenblätter gelaufen und für das bereits erstellte Diagramm die Datenreihe für das betreffende Tabellenblatt hinzugefügt.
Wenn du 2 Diagramme erstellen willst ist das einfachste, noch eine äußere Schleife zu machen, damit zuerst das eine Diagramm voll erstellt wird und danach das zweite.
Um den Namen zu erstellen füge einfach folgende Zeile hinzu:

.XValues = wksTab.Range(wksTab.Cells(2, 1), wksTab.Cells(lngLetzte, 1))
.Values = wksTab.Range(wksTab.Cells(2, 2), wksTab.Cells(lngLetzte, 2))
.Name = wksTab.Name '

GrußformelBeverly's Excel - Inn
Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige