ich hab ein Problem. Ich habe eine Excel-Liste mit 4 relevanten Spalten: Nachname, Vorname, Alter und Einkommen.
Jetzt habe ich auf dem ersten Blatt eine Tabelle mit den Daten, auf ein anderes soll ein Punktdiagramm erzeugt werden. Dabei soll das Alter die X-Achse beschreiben, das Einkommen die Y-Achse. Als Datenbeschriftung soll jetzt jedoch je der erste Buchstabe des Vor- und Nachnamens verwendet werden.
Ich habe mal eine Beispiel-Excel dem Anhang hinzugefügt. Würde mich über Hilfe sehr freuen!
ich bin noch recht neu in dem Gebiet VBA und habe daher noch ein paar Fragen zu dem Code.
p ist ja die Laufvariable, durch den Ausdruck Cells(p +2,1) wird demnach angenommen, dass die Tabelle eine Überschrift hat und die Werte ab Zeile 2 beginnen?
Kann ich zudem durch den Ausdruck: Range(Cells(p + 2, 1), Cells(p + 2, 2)) die ersten beiden Spalten zur Beschriftung heranziehen?
Ich habe auch mal versucht aus Eigeninitiative was zu basteln:
Sub BeschriftungWith()
Dim ch As Chart, sc As Series, n As Long Set ch = ActiveSheet.ChartObjects("Diagramm 1").Chart Set sc = ch.SeriesCollection(1) With Charts("Diagramm 1") For n = 2 To Charts.Points.Count With sc.Points(n) sc.HasDataLabel = True sc.DataLabel.Text = Range(Cells(n, 1), Cells(n, 2)) End With End With End Sub
Jedoch bekomme ich dort eine Fehlermeldung, hat jemand eine Idee?
07.05.2018, 13:44 (Dieser Beitrag wurde zuletzt bearbeitet: 07.05.2018, 13:45 von JonasRe.)
Ich habe jetzt nun fast alles was ich brauche. Ich kann jetzt mein Diagramm, welches sich auf dem gleichen Tabellenblatt wie die zugrundeliegenden Daten befindet, beschriften. Jedoch möchte ich gerne mein Diagramm, welches sich auf dem 4. Tabellenblatt befindet bzw. den Namen "Sternenhimmel" besitzt, erzeugen aus den Daten auf dem 2. Tabellenblatt bzw. dem Namen "Gehaltsdaten".
Mein aktueller Code sieht so aus:
Sub Sternenhimmel2()
Dim lngPunkt As Long With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1) .ApplyDataLabels For lngPunkt = 1 To .Points.Count .Points(lngPunkt).DataLabel.Text = Left(Cells(lngPunkt, 2), 1) & " " & Left(Cells(lngPunkt, 1), 1) Next lngPunkt End With End Sub
Also es geht mir darum, den Verweis auf das 2. Tabellenblatt zu definieren.
die Grundidee mag schon stimmen, aber Du kommst mit den Objekten und dem With noch nicht so recht zurande ...
Schaue doch mal, wo genau der Fehler passiert. For n = 2 To Charts.Points.Count
Weiter oben schreibst Du With Charts("Diagramm 1")
Jetzt schaue mal auf den Unterschied bei Charts und frage, welches Diagramm bei der For-Schleife eigentlich genommen werden soll ...
Weiter im Code ...
oben definierst Du ch und sc
Set ch = ActiveSheet.ChartObjects("Diagramm 1").Chart Set sc = ch.SeriesCollection(1)
Warum schreibst Du dann With Charts("Diagramm 1")
und nicht With Ch
In der Schleife reicht dann
For n = 2 To sc.Points.Count
Weiter im Code ...
With sc.Points(n) --> wieso eigentlich? das passt nicht zu den nächsten beiden Zeilen, die bräuchten kein With ... sc.HasDataLabel = True sc.DataLabel.Text = Range(Cells(n, 1), Cells(n, 2)) End With ---> und hier fehlt noch ein Next End With
Objekt unterstützt diese Eigenschaft oder Methode nicht
Mein Code sieht nun so aus:
Option Explicit
Sub Sternenhimmel() Dim lngPunkt As Long With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1) .ApplyDataLabels For lngPunkt = 1 To .Points.Count .Points(lngPunkt).DataLabel.Text = Sheets("Gehaltsdaten").Left(Cells(lngPunkt, 2), 1) & " " & Sheets("Gehaltsdaten").Left(Cells(lngPunkt, 3), 1) Next lngPunkt End With End Sub