Lösungsvorschlag
06.08.2021 16:52:07
Beverly
Hi Michael,
Zitat: Zweite Frage: Programmtitel bezieht sich auf den jeweiligen Namen.
Unsere Codevariablen definieren in den folgenden Spalten definieren denn Punkt genauer. Sollte aber fürs Diagramm nicht relevant sein oder?
Dass sich der Diagrammtitel auf den Namen bezieht hatte ich fast erraten, aber da du keine genaueren Angaben machst, was in welcher Spalte steht und wie es in den Diagrammtitel einfließen soll und ich das deiner Beispielmappe auch nicht entnehmen kann, kann ich dir bei den Diagrammtiteln nicht weiterhelfen und du musst sie in allen fertigen Diagrammen von Hand anpassen.
Lösung für das Erstellen der Diagramme ohne angepasste Titel:
Sub DiasErstellen()
Dim lngZeile As Long
Dim lngAnzahl As Long
Dim lngStart As Long
Dim strFormel
Dim strX As String
Dim strY As String
Dim chrDia As ChartObject
Set chrDia = ActiveSheet.ChartObjects("DiaVorlage")
For lngZeile = 13 To Columns(1).Find(What:="*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
lngAnzahl = Application.CountIf(Columns(1), Cells(lngZeile, 1)) - 2
chrDia.Copy
ActiveSheet.Paste
DoEvents
With ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count).Chart
strFormel = Split(.SeriesCollection(1).Formula, ",")
strX = ActiveSheet.Name & "!" & Range(Cells(lngZeile + 2, 5), _
Cells(lngZeile + 1 + lngAnzahl, 5)).Address
strY = ActiveSheet.Name & "!" & Range(Cells(lngZeile + 2, 8), _
Cells(lngZeile + 1 + lngAnzahl, 8)).Address
strFormel(1) = strX
strFormel(2) = strY
.SeriesCollection(1).Formula = Join(strFormel, ",")
With .Parent
.Top = Cells(lngZeile, 12).Top
.Left = Cells(lngZeile, 12).Left
End With
End With
lngZeile = lngZeile + lngAnzahl + 1
Next lngZeile
End Sub
Der Code macht im Groben gesagt folgendes: es wird in einer Schleife über alle Zeilen ab Zeile 13 gelaufen, da das 1. Diagramm als Vorlage bereits vorhanden ist (und vorhanden sein muss!!). Dieses 1. Diagramm wird kopiert, eingefügt, der Datenbereich angepasst und es wird an die richtige Position gesetzt.