Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1740to1744
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

Diagramme zeichnen

Diagramme zeichnen
19.02.2020 13:01:09
Kevin
Hallo!
Hoffe ihr könnt mir bei meinem Problem weiterhelfen :-)
Ich habe ein Makro geschrieben die eine CSV Datei einliest. Nun möchte ich, dass mehrere Diagramme gezeichnet werden. Der Arbeitsblattname und die Länge der Tabelle sind variabel, sollten auf das Makro/Diagramm keinen Einfluss haben..
das hab ich mal Probiert...
**********************************************

Sub DiagrammErstellen()
Dim chObj As ChartObject
Dim lngZeileMax As Long
With Active.Worksheet
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
Set chObj = .ChartObjects.Add(100, 100, 100, 100)  'links, oben, Breite, Höhe
With chObj.Chart
.ChartType = xlLine
.SetSourceData Source:=.Range(L1:L & lngZeileMax)
.HasTitle = True
.ChartTitle.Text = .Range("L1").Value
End With
End With
End Sub

************************************
Wo liegt der Fehler? (Außer bei mir :-P)

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramme zeichnen
19.02.2020 13:10:16
ChrisL
Hi
Syntax-Korrektur:
Sub DiagrammErstellen()
Dim chObj As ChartObject
Dim lngZeileMax As Long
With ActiveSheet
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
Set chObj = .ChartObjects.Add(100, 100, 100, 100)  'links, oben, Breite, Höhe
With chObj.Chart
.ChartType = xlLine
.SetSourceData Source:=ActiveSheet.Range("L1:L" & lngZeileMax)
.HasTitle = True
.ChartTitle.Text = ActiveSheet.Range("L1").Value
End With
End With
End Sub
cu
Chris
AW: Diagramme zeichnen
19.02.2020 13:19:59
MCO
Hallo Kevin!
so ganz ohne dein Zutun ist das nicht falsch gelaufen:
Ändere Active.Worksheet in Activesheet
Andere .SetSourceData Source:=.Range(L1:L & lngZeileMax)
in .SetSourceData Source:=ActiveSheet.Range("L1:L" & lngZeileMax)
(Damit sieht die Adressangabe auch aus wie unten ;-))
Durch das vorangehende "With chObj.chart" ist der Bezug zu Activesheet nicht mehr gegeben
   With ActiveSheet
lngZeileMax = .Cells(Rows.Count, 1).End(xlUp).Row
Set chObj = .ChartObjects.Add(100, 100, 100, 100)  'links, oben, Breite, Höhe
With chObj.Chart
.ChartType = xlLine
.SetSourceData Source:=ActiveSheet.Range("L1:L" & lngZeileMax)
.HasTitle = True
.ChartTitle.Text = ActiveSheet.Range("L1").Value
End With
End With
End Sub
Gruß, MCO
Anzeige
Bezüge in With-Anweisungen - Diagramm
19.02.2020 15:17:34
Beverly
Hi Kevin,
Sub DiagrammErstellen()
Dim lngZeileMax As Long
With ActiveSheet
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
With .ChartObjects.Add(100, 100, 100, 100).Chart  'links, oben, Breite, Höhe
.ChartType = xlLine
.SetSourceData Source:=.Parent.Parent.Range("L1:L" & lngZeileMax)
.HasTitle = True
.ChartTitle.Text = .Parent.Parent.Range("L1").Value
End With
End With
End Sub

Durch Verwendung von .Parent.Parent bezieht sich der Code auf das zweifach übergeordnete Objekt des Diagramms - die nächst höhere Objektstufe ist das Diagrammobjekt und danach die nächsthöhere Objektstufe das Tabellenblatt. Dies ist erforderlich, da sich innerhalb jeder With-Anweisung immer nur auf das darin genannte Objekt bezogen wird - und das ist im konkreten Fall eben das Diagramm und nicht mehr das Tabellenblatt.


Anzeige
AW: Diagramme zeichnen
20.02.2020 13:59:44
Kevin
Hallöchen!
Vorweg mal ein großes Dankeschön für die tolle Hilfe im Forum. Echt spitzen Hilfe ist hier am Start (und extrem viel Know-how!).
Hab den Syntax mal ausgebessert und leicht verändert, aber offensichtlich hab ich mit Diagrammen nicht unbedingt Glück ;-)
Also ich wollte nachträglich noch eine X-Achse einfügen mit Werten aus der B Spalte (sollte wieder bis max gehen), wieder mindererfolgreich. Wie schreibe ich das rein?
Zusätzlich wollte ich irgendwo noch den (variablen) Registerblattname ins Diagramm bringen, aber nicht aus Diagrammtitel sondern einfach aus Textfeld. Da hab ich keine Ahnung wie ich das anstellen soll...
**********************************************
Sub DiagrammErstellen()
Dim chObj As ChartObject
Dim lngZeileMax As Long
With ActiveSheet
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
Set chObj = .ChartObjects.Add(200, 200, 300, 200)  'links, oben, Breite, Höhe
With chObj.Chart
.ChartType = xlLine
.SetSourceData Source:=ActiveSheet.Range("L3:L" & lngZeileMax, "B3:B" & lngZeileMax)
.HasTitle = True
.ChartTitle.Text = ActiveSheet.Range("L1").Value
End With
End With
End Sub
***************************************
Wenn mein "Lieblingsprojekt" vorbei ist, werde ich bestimmt mal ein großes Bier trinken gehen :-D
Anzeige
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


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige