Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1228to1232
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

Chart unter VBA

Chart unter VBA
TommiH
Moin,
hm, und noch eine Frage, ich würde gerne aus den Spalten A6-A11 (Betextung) und D6-D11 (Werte) einen ganz normalen Balkenchart generieren, horizontal ausgerichtet, mit den Werten am Ende eines jeden Balkens, eigentlich gerne die Cylinder-Balken - und das Ganze ohne Legende.
Da ich mich mit Charts noch sehr wenig auskenne (unter VBA fast noch gar nicht) dachte ich ich nehme den Makro-Recorder, aber der zeichnet DAS auf - und wenn ich das einbinde dann kommt nur ein
'Anwendungs oder objektorientierter Fehler'
Kann mir da jemand einen Tip geben, wie ich den Makro-Recorder-Code lauffähig bekomme?
Tommi

Range("A6:A11,D6:D11").Select
Range("D6").Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range( _
"'EP-Auswertung'!$A$6:$A$11;'EP-Auswertung'!$D$6:$D$11")
ActiveChart.ChartType = xlCylinderBarClustered
ActiveChart.Legend.Select
Selection.Delete
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.SeriesCollection(1).Select
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.SeriesCollection(1).ApplyDataLabels
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.SeriesCollection(1).DataLabels.Select

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Chart unter VBA
05.09.2011 16:02:02
Beverly
Hi Tommi,
meinst du das so:

Sub DiaErstellen()
With ActiveSheet.Shapes.AddChart.Chart
.ChartType = xlCylinderBarClustered
.SetSourceData Source:=Range("'EP-Auswertung'!$A$6:$A$11,'EP-Auswertung'!$D$6:$D$11")
.ApplyDataLabels
End With
End Sub



AW: Chart unter VBA
05.09.2011 16:40:09
TommiH
Hallo Karin,
oh, das ist schon viel besser ;) - danke! - also mein Chart habe ich nun, die Legende habe ich auch noch mit .Legend.Delete entfernen können.
Nun fehlen mir eigentlich nur noch 4 Dinge ;)
- Chart ca. (linke obere Ecke) auf A15
- 3d-Drehung weg
- Füllfarbe anders
- Kann man die Werte sortieren, ohne das man die Original-Werte 'umbauen' muss?
und als wichtigste Frage (Hilfe zur Selbsthilfe) - wo finde ich die verflixten Chartfunktionen ;) - irgendwie finde ich mit charts in der Excel-Hilfe nicht wirklich viel - gibt es irgendwo eine Liste, welche Befehle was sind? Mit dem Makkrorecorder komme ich da anscheinend leider nicht dran :(
Hast du da 'nen Tip?
Tommi
Anzeige
AW: Chart unter VBA
05.09.2011 18:39:58
Beverly
Hi Tommi,
ich nehme an, du meinst das so:

Sub DiaErstellen()
With ActiveSheet.Shapes.AddChart.Chart
.SetSourceData Source:=Range("'EP-Auswertung'!$A$6:$A$11,'EP-Auswertung'!$D$6:$D$11")
.SetElement (msoElementLegendNone)
.ChartType = xlCylinderBarClustered
.ApplyDataLabels
.Rotation = 0
.SeriesCollection(1).Interior.ColorIndex = 4 ' Farbe anpassen
.Axes(xlCategory).ReversePlotOrder = True
.Axes(xlCategory).Crosses = xlMaximum
.Parent.Top = Range("A15").Top
.Parent.Left = Range("A15").Left
End With
End Sub

Zu deiner Frage bezüglich Chart und VBA: Excel2007 zeichnet leider keinen Code für Charts und Shapes auf - das ist erst ab Version 2010 wieder möglich. Falls du noch eine Version vor 2007 hast, kannst du diese verwenden, denn 99% des damit aufgezeichneten Codes funktionert auch noch in den höheren Versionen. Allerdings gibt es ab Excel2007 eine ganze Reihe von Formatierungsmöglichkeiten mehr, sodass einem dann nur übrig bleibt, sich durch die Excel-Hilfe "durchzuwursteln", oder man setzt im VBA-Editor eine Überwachung und lässt sich die entsprechenden Eigenschaften im Überwachungsfenster anzeigen.


Anzeige
AW: Chart unter VBA
06.09.2011 10:06:34
TommiH
Hallo Karin,
erstmal herzlichen Dank für die super Hilfe!
Also - der Code funktioniert wunderbar - Farbe habe ich angepasst.
Interessant finde ich, das es anscheinend mehrere Möglichkeiten gibt, das Ziel zu erreichen ;)
.SetElement (msoElementLegendNone)
.Legend.Delete
Das funktioniert beides...
Ich habe nun auch in der Hilfe Chart-Objektmember und Eigenschaften gefunden, hm, aber nichts zu einer Größenänderung, die fehlt mir nun nur noch zu meinem Glück...
Irgendwie fehlt schon eine gescheite Hilfe (in Excel) die übersichtlich die Funktionen/Variablen eines Charts darstellt...
Oh - und noch etwas, neben der Größe, die Quell-Definition sieht ja im Moment so aus.
.SetSourceData Source:=Range("'Tab'!$A$6:$A$11,'Tab'!$D$6:$D$11")
Der Haken - das ist schwer in eine Schleife (es gibt dutzende von Charts) zu packen. Geht das von der Definition nicht auch irgendwie im Stil von:
.SetSourceData Source:=Range("'Tab'!" & Range(Cells(6, 1), Cells(11, 1)) & ",'Tab', " & Range(Cells(6, 4), Cells(11, 4)))
Also das man es mit Variablen ansprechen kann?
Tommi
Anzeige
AW: Chart unter VBA
06.09.2011 10:43:08
Beverly
Hi Tommy,
mit den beiden Codezeilen

      .Parent.Top = Range("A15").Top
.Parent.Left = Range("A15").Left

wird die Position der linken oberen Ecke festgelegt - nach dem selben Prinzip kann man auch die Größe definieren

      .Parent.Height = Range("A15:D20").Height    ' Höhe
.Parent.Left = Range("A15:D20").Width    ' Breite

Anstelle eines Zellbereichs kann man auch direkt Zahlen verwenden.
Die Definition des Wertebereichs des Diagramms lässt sich natürlich auch mit Variablen realisieren. Das WIE hängt aber davon ab, was genau in deinen Zellen steht.


Anzeige
AW: Chart unter VBA
06.09.2011 10:56:56
TommiH
Hallo Karin,
perfekt, damit passt nun auch die Größe - so, nun also ans letzte Problem ;)
Ich habe ein Excel-Sheet mit mehreren 1.000 Zeilen. Alle 150 Zeilen soll ein Chart eingefügt werden, ich habe also eine Schleife die von 1-75000 durchläuft und alle 150 Zeilen soll der Bereich
Beschreibung : Range(Cells(zeile,1),Cells(zeile+8,1))
Werte : Range(Cells(zeile,4),Cells(zeile+8,4))
dargestellt werden.

zeile = 1
For Gzeile=1 to 7500
zeile = zeile +1
If zeile=150 Then
zeile = 1
Endif
(programmcode)
(modifikationen)
If zeile=1 Then
(Chart)
Endif
Next
Ist das verständlich? Ich modifiziere/ergänze halt rund 140 Zeilen lang und dann soll ein Chart eingebaut werden - also immer wenn ich in (quasi) Zeile 1 bin, dann will ich da einen Chart einfügen, also in Zeile 1, 151, 301, 451 usw.
Tommi
Anzeige
AW: Chart unter VBA
06.09.2011 11:58:28
Beverly
Hi Tommi,
eine hochgeladene Beispieldatei wäre da sehr hilfreich.


AW: Chart unter VBA
06.09.2011 12:30:28
TommiH
Hallo Karin,
kann ich machen, ich bin allerdings schon deutlich weiter ;)
Ich habe deine Codezeile
.SetSourceData Source:=Range("'Tab'!$A$6:$A$11,'Tab'!$D$6:$D$11")
umgebaut in
q=14
.SetSourceData Source:=Range("'Tab'!$A$" & q - 8 & ":$A$" & q - 3 & ",Tab'!$D$" & q - 8 & ":$D$" & q - 3)
Damit kann ich die Position in Abhängigkeit von der Variablen q ansteuern.
ABER - das erzeugt bei mir unterschiedliche Charts - also optisch/vom Layout...
Wie kann soetwas sein?
Tommi
Anzeige
AW: Chart unter VBA
06.09.2011 12:47:31
TommiH
Hallo Karin,
wirklich verwirrend, wenn ich deine Codezeile nehme, dann wird
Userbild
erstellt. Nehme ich meine Zeile, dann wird
Userbild
erstellt. Das verstehe ich nicht. Dabei habe ich doch nur die Zahlen durch eine Variable ersetzt...
Tommi
AW: Chart unter VBA
06.09.2011 12:54:44
Beverly
Hi Tommi,
der Inhalt meines letzten Beitrages gilt nach wie vor.


Anzeige
AW: Chart unter VBA
06.09.2011 12:58:20
TommiH
Hm,
du meinst das Hochladen? ;) - was denn genau - beide Dateien, also Programmcode + Excel-Datei oder meinst du nur den Programmcode?
Der Haken ist, das ich die ExcelDatei schlecht hochladen kann, weil die das Hochladevolumen locker sprengen würde... Da müsste ich erstmal kürzen...
Tommi
AW: Chart unter VBA
06.09.2011 14:52:13
Beverly
Hi Tommi,
1. was nützt mir dein Programmcode alleine und 2. ist der Programmcode doch in der Excel-Datei enthalten - oder sehe ich das falsch?
Zum Testen ist nicht die komplette Arbeitsmappe erforderlich, es reichen so viele Daten, dass 2 - 3 Diagrmme erstellt werden können.


Anzeige
AW: Chart unter VBA
06.09.2011 15:50:51
TommiH
Hallo Karin,
naja, direkte Fehler im Code kann ich z.B. schon erkennen, wenn ich mich mit einer Progammiersprache gut auskenne ;) - und nein der Code ist nich in der Excel-Datei enthalten, sondern in meiner personl.xls - ist aber natürlich kein Problem ihn in die ExcelDatei reinzupacken.
Wenn du magst kann ich die Datei gerne hochladen (ExcelDummy+VBA-Script) allerdings hat sich von meiner Seite das Problem inzwischen erledigt, ich weiss nicht wieso, aber in einem Testlauf habe ich mein Konstrukt vor deinem gehabt und er hat damit 2x die Befehlszeile ausgeführt
v1 = "'Tab'!$A$" & q - 8 & ":$A$" & q - 3 & ",'Tab'!$D$" & q - 8 & ":$D$" & q - 3
.SetSourceData Source:=Range(v1)
.SetSourceData Source:=Range(v1)
Und - danach ist das Ergebnis einwandfrei - wenn ich nur einmal .SetSourceData nehme, dann sieht es aus wie in den beiden Grafiken - es macht auf mich den Eindruck, das mit der Zeile .SetSourceData irgendetwas initialisiert wird, und erst im zweiten Anlauf das gewünschte Ergebnis kommt, warum auch immer...
Tommi
In Zeile 210 ist der Teil des Charts welcher so eigenartig ist...
https://www.herber.de/bbs/user/76488.xls
Anzeige
AW: Chart unter VBA
06.09.2011 16:50:15
Beverly
Hi Tommi,

naja, direkte Fehler im Code kann ich z.B. schon erkennen, wenn ich mich mit einer Progammiersprache gut auskenne ;)

Dann solltest du auch selbst erkennen können, was an deinem Code falsch ist.


AW: Chart unter VBA
06.09.2011 16:59:05
TommiH
Hallo Karin,
nicht wirklich (VBA bescheiden) - wenn ich mich mit VBA gut auskennen würde, dann würed ich hier ja nicht fragen, sondern eher vermehrt antworten ;)
Und wie gesagt, wenn ich die Zeile 2x ausführe, dann klappt alles wie gewünscht - wo auch immer da der Fehler zu suchen ist...
Tommi
AW: Chart unter VBA
09.09.2011 09:35:39
TommiH
Okay,
dann lasse ich es einfach so, wie gesagt, es funktioniert so ja bestens, auch wenn ich das mit der doppelten Zeile nicht verstehe ;)
Danke auf alle Fälle für die super Hilfe, dann kann ich da mal noch etwas weiter rumexperimentieren, die Pflicht ist damit geschafft, der Rest ist dann eh nur noch 'Kür' ;)
Tommi
AW: Chart unter VBA
06.09.2011 12:56:48
TommiH
Jetzt bin ich völlig verwirrt, ich habe mir den Ausdruck mal in einer Variablen zwischengespeichert und den generierten mit deinem verglichen - die sind identisch! Und trotzdem kommen unterschiedliche Ergebnisse dabei raus?

v1 = "'Tab'!$A$" & q - 8 & ":$A$" & q - 3 & ",'Tab'!$D$" & q - 8 & ":$D$" & q - 3
.SetSourceData Source:=Range(v1)
' - Ausdruck der beim VBA-Programmlauf  in v1 entsteht
'                          -  "'Tab'!$A$6:$A$11,'Tab'!$D$6:$D$11"
.SetSourceData Source:=Range("'Tab'!$A$6:$A$11,'Tab'!$D$6:$D$11")
Die Codestücke sind wirklich identisch - da bin ich mit meinem Latein am Ende.
Tommi
AW: Chart unter VBA
06.09.2011 11:29:16
TommiH
Hm,
(Werte) also mit
.SetSourceData Source:=Range(Range(Cells(6, 1), Cells(11, 1)), Range(Cells(6, 4), Cells(11, 4)))
kann ich zwar die Range mit Zahlen/Variablen angeben, allerdings bekomme ich dann komischerweise bei der Achsenskalierung Probleme (ich habe da nicht mehr 1-100 sondern %-Werte stehen?!?
Und bei der Größenangabe des Charts bin ich nun doch etwas verwirrt...
.Parent.Height = Range("A15:D20").Height ' Höhe
.Parent.Left = Range("A15:D20").Width ' Breite
A15:D20 - ist doch ein Bereich - (linke obere - rechte untere Ecke) - ist das wirklich richtig, schließlich möchte ich ja nur die Höhe darstellen (also 15-20) - ebenso bei Breite...
Ah - ich glaube nun habe ich es - mit
.Parent.Height = 50
.Parent.Width = 200
geht es wie gewünscht ;)
Fein also auch erledigt, bleibt nur noch die Postionierung mit den Variablen (x/y)
Tommi
AW: Chart unter VBA
06.09.2011 11:49:02
TommiH
Oh, und für die Position kann man also auch einfach
.Parent.Top = Rows(15).Top
.Parent.Left = Columns(1).Left
schreiben, das ist (für den VariablenEinsatz) natürlich auch sehr praktisch - fehlt also nur noch die Herkunfts-Daten-Definition...
Tommi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige