Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Datenbeschriftung VBA
#1
Hallo zusammen,

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!

Grüße
Jonas


Angehängte Dateien
.xlsx   Datenbeschriftung.xlsx (Größe: 23,42 KB / Downloads: 1)
Antworten Top
#2
Hallo,

schau dir mal dies hier an.
Schöne Grüße
Berni
Antworten Top
#3
Hallo Berni, 

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?

Grüße
Jonas
Antworten Top
#4
Hallo,

Zitat:Jedoch bekomme ich dort eine Fehlermeldung, hat jemand eine Idee?

Und was sagt sie, die Fehlermeldung?

Schreibe mal Option Explicit als erste Zeile in das Modul und
starte Dein Makro noch einmal.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#5
Hallo Käpt'n Blaubär,

ich habe "Option Explicit" hinzugefügt in die erste Zeile.

Der Fehler ist:

Fehler beim Kompilieren:

Methode oder Datenobjekt nicht gefunden


Stimmt die Grundidee meines Codes oder siehst du eine einfache Art das Problem zu lösen?

Danke vorab!
Antworten Top
#6
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.

Danke und Grüße
Jonas
Antworten Top
#7
Hallöchen,

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

Hier mal ein paar Links zu Microsoft
https://msdn.microsoft.com/de-de/vba/exc...ject-excel
https://msdn.microsoft.com/de-de/vba/exc...ject-excel
https://msdn.microsoft.com/de-de/VBA/Exc...ject-excel
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
Hallo, 

vielen Dank für deine Hilfe! - Ich werde mir die Unterlagen gleich mal anschauen

Ich habe jetzt meinen Code, wie oben beschrieben, schon fast bis auf den Verweis innerhalb der Tabellenblätter, hättest du dazu noch eine Idee?

Grüße
Jonas
Antworten Top
#9
Hallöchen,

wenn Du nur den Teil mit den Beschriftungen meinst ...

Dort steht in Deinem Code
...Cells(lngPunkt, 2), ...

Du musst dann vor die Cells jeweils das Tabellenblatt schreiben, z.B.

Sheets("Gehaltsdaten").Cells(...)...

bei den zweiten Cells dann auch.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Ich bekomme dabei folgende Fehlermeldung:

Laufzeitfehler "438":

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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste