VBA Textfeld und Achsenbeschriftung im Diagramm
20.02.2020 14:56:53
Beverly
Eine (primäre) X-Achse kann nicht nachträglich "eingefügt" werden - sie ist bereits vorhanden. Was du meinst ist, dass du eine Achsenbeschriftung hinzufügen willst. Da die Daten bei dir nicht zusammenhängend sind, gibt es 2 Möglichkeiten, dies zu realisieren.
Variante 1: man fasst die Bereiche für Achsenbeschriftung und Y-Werte vorher zusammen und weist diesen dann als Datenquelle zu:
Sub DiagrammErstellen1()
Dim lngZeileMax As Long
Dim objText As Object
Dim rngBereich As Range
With ActiveSheet
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
' Bereich zusammenfassen
Set rngBereich = Union(.Range("B1:B" & lngZeileMax), .Range("L1:L" & lngZeileMax))
With .ChartObjects.Add(100, 100, 100, 100).Chart 'links, oben, Breite, Höhe
.ChartType = xlLine
' zusammengefassten Bereich als Datenquelle zuweisen
.SetSourceData Source:=rngBereich
.HasTitle = True
.ChartTitle.Text = .Parent.Parent.Range("L1").Value
' Textfeld hinzufügen
Set objText = .Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 0, 0)
' in Textfeld den Blattnamen eintragen
objText.DrawingObject.Text = .Parent.Parent.Name
' Zeilenumbruch in Textfeld nicht zulassen
objText.DrawingObject.ShapeRange.TextFrame2.WordWrap = msoFalse
' Textfeld an Textgröße anpassen
objText.DrawingObject.ShapeRange.TextFrame2.AutoSize = msoAutoSizeShapeToFitText
End With
End With
End Sub
Vairante 2: man erstellt das Diagramm aus dem Bereich mit den Y-Werten und weist dann der 1. Datenreihe nachträglich den Achsenbeschriftungsbereich zu (dies gilt dann bei einem Liniendiagramm gleichzeitig für alle Datenreihen, falls mehrere vorhanden sein sollten).
Sub DiagrammErstellen2()
Dim lngZeileMax As Long
Dim objText As Object
With ActiveSheet
strTab = .Name
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
With .ChartObjects.Add(100, 100, 100, 100).Chart 'links, oben, Breite, Höhe
.ChartType = xlLine
' Bereich mit den Y-Werten als Datenquelle zuweisen
.SetSourceData Source:=.Parent.Parent.Range("L1:L" & lngZeileMax)
.HasTitle = True
.ChartTitle.Text = .Parent.Parent.Range("L1").Value
' Achsenbeschriftung aus Spalte B für die 1. Datenreihe zuweisen
.SeriesCollection(1).XValues = .Parent.Parent.Range("B1:B" & lngZeileMax)
' Textfeld hinzufügen
Set objText = .Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 0, 0)
' in Textfeld den Blattnamen eintragen
objText.DrawingObject.Text = .Parent.Parent.Name
' Zeilenumbruch in Textfeld nicht zulassen
objText.DrawingObject.ShapeRange.TextFrame2.WordWrap = msoFalse
' Textfeld an Textgröße anpassen
objText.DrawingObject.ShapeRange.TextFrame2.AutoSize = msoAutoSizeShapeToFitText
End With
End With
End Sub