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

VBA Chart maximale Länge Diagrammdatenbereich

VBA Chart maximale Länge Diagrammdatenbereich
15.12.2012 15:45:19
Philipp
Liebe Forum Gemeinde,
ich habe ein kleines Problem bei der Erstellung von dynamischen Charts in Excel VBA.
Ich habe in Excel eine Reihe an Tabellenblätter (Name) für das ich jeweils in weiteres Tabellenblatt (Name-Chart) erstelle. In das Name-Chart Blatt soll dann jeweils der Inhalt von den Blättern Name grafisch dargestellt werden.
Hierzu habe ich mir auch eine kleine Funktion geschrieben.

Sub Diagramm(aktVerein As String, AktEbene As Integer, PrevEbene As Integer)
Dim ChartBereich As String
Dim ChartBereichAVG As String
Dim AnzahlZeilen As Integer
Dim i As Integer
Dim ChartPositionTop As Integer
Dim currentTitel As String
currentTitel = ""
ChartPositionTop = 0
AnzahlZeilen = Worksheets(aktVerein).Cells(Rows.Count, 10).End(xlUp).Row
For i = 2 To AnzahlZeilen
If Worksheets(aktVerein).Cells(i, AktEbene)  "" Then
ChartBereich = ChartBereich & "'" & Worksheets(aktVerein).Name & "'!" & Cells(i,  _
AktEbene).Address & "," & "'" & Worksheets(aktVerein).Name & "'!" & Cells(i, 10).Address & ","
ChartBereichAVG = ChartBereichAVG & "'" & Worksheets(aktVerein).Name & "'!" & Cells( _
i, 11).Address & ","
End If
If Worksheets(aktVerein).Cells(i, PrevEbene)  "" And ChartBereich  "" Then
ChartPositionTop = ChartPositionTop + 320
Call createChartFromArea(ChartBereich, ChartBereichAVG, currentTitel, aktVerein,  _
AktEbene, ChartPositionTop)
ChartPositionTop = ChartPositionTop + 320
ChartBereich = ""
ChartBereichAVG = ""
End If
If Worksheets(aktVerein).Cells(i, PrevEbene)  "" And ChartBereich = "" Then
currentTitel = Worksheets(aktVerein).Cells(i, PrevEbene)
End If
Next i
Call createChartFromArea(ChartBereich, ChartBereichAVG, currentTitel, aktVerein, AktEbene,  _
ChartPositionTop)
End Sub
und

Sub createChartFromArea(ChartBereich As String, ChartBereichAVG As String, diagramTitle As  _
String, aktVerein As String, AktEbene As Integer, ChartPositionTop As Integer)
On Error GoTo charterror:
' Letzte "," abschneiden
ChartBereich = Left(ChartBereich, Len(ChartBereich) - 1)
ChartBereichAVG = Left(ChartBereichAVG, Len(ChartBereichAVG) - 1)
'Chart erstellen
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Range(ChartBereich)
'Average Spalte einfügen
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Values = Range(ChartBereichAVG)
'Chart formatieren
ActiveChart.ChartStyle = 32
ActiveChart.SetElement (msoElementLegendBottom)
ActiveChart.SetElement (msoElementChartTitleAboveChart)
ActiveChart.SetElement (msoElementDataLabelOutSideEnd)
If AktEbene = 2 Then
ActiveChart.ChartTitle.Text = Worksheets(aktVerein).Cells(1, AktEbene)
Else
'ActiveChart.ChartTitle.Text = Worksheets(aktVerein).Cells(2, 1) & " - " & diagramTitle
ActiveChart.ChartTitle.Text = diagramTitle & " - " & Worksheets(aktVerein).Cells(1,  _
AktEbene)
End If
ActiveChart.SeriesCollection(1).Name = Worksheets(aktVerein).Cells(2, 1)
ActiveChart.SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Font.Bold = msoTrue
ActiveChart.SeriesCollection(2).Name = "Ø"
ActiveChart.SeriesCollection(2).DataLabels.Format.TextFrame2.TextRange.Font.Bold = msoTrue
'Chart positionieren
With ActiveChart.Parent
.Width = 400
.Height = 300
.Top = 5 + ChartPositionTop
.Left = 5
End With
Exit Sub
charterror:
MsgBox aktVerein & " " & diagramTitle
End Sub
Bei ALLEN Tabellenblätter, deren Bezeichnung länger ist tritt ein Fehler beim Erstellen des Diagramms auf. Daher habe ich einmal händisch die Namen verkürzt und siehe da... es hat funktioniert.
Anscheinend kann die Funktion

ActiveChart.SetSourceData Source:=Range(ChartBereich)
nur eine beschränkte Länge aufnehmen.
Leider ist es für die Endanwendung nicht möglich, die Länge der Tabellenblatt Bezeichnung zu verkürzen.
Über eine Lösungsidee wäre ich sehr froh :)
LG,
Philipp

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Chart maximale Länge Diagrammdatenbereich
15.12.2012 15:59:52
Beverly
Hi Philipp,
es gibt nur Probleme, wenn der Datenbereich aus nicht zusammenhängenden Tabellenbereichen (z.B. A1, A3, A5, A7) besteht. Besteht der Datenbereich dagegen aus einem zusammenhängenden Bereich (z.B. A3:A7), sind für Excel2010 keine Grenzen an Datenpunkten je Datenreihe gesetzt, außer dem Speicher des Rechners. Du müsstest deine Daten aus den verschiedenen Bereichen zusammenführen, dann sollte es auch keine Probleme geben.


AW: VBA Chart maximale Länge Diagrammdatenbereich
15.12.2012 16:05:27
Philipp
Hallo Karin,
vielen Dank für deine schnelle Antwort. Leider kann ich die Struktur der Daten nicht ändern. Aktuell ist es so, dass der Datenbereich aus nicht zusammenhängenden Tabellenbereichen besteht. Darum ja anscheinend auch mein Problem :(
Muss ich mir also ein Hilfs-Tabellenblatt erstellen, in dem die Daten schön nebeneinander, zusammenhängend aufgelistet sind oder hast du evtl. eine "schönere" Lösungsidee?

Anzeige
AW: VBA Chart maximale Länge Diagrammdatenbereich
15.12.2012 16:29:18
Beverly
Hi Philipp,
die Ursache hatte ich ja schon genannt und auch die (einzige) Lösung.


AW: VBA Chart maximale Länge Diagrammdatenbereich
15.12.2012 16:31:07
Philipp
Hi Karin,
Danke

AW: VBA Chart maximale Länge Diagrammdatenbereich
15.12.2012 18:35:33
Luschi
Hallo Philipp,
nur nicht gleich die Flinte ins Korn werfen.
Jede Tabelle kann man in Vba auf 2 verschiedene Arten referenzieren.
So wie Du das machst:
aktVerein = "Das ist ein sehr langer TabName"
ActiveChart.ChartTitle.Text = diagramTitle & " - " & Worksheets(aktVerein).Cells(1, AktEbene)
oder:
ActiveChart.ChartTitle.Text = diagramTitle & " - " & Tabelle1.Cells(1, AktEbene).Value
Tabelle1 ist dabei der vba-CodeName der Tabelle, siehe hier:
Userbild
Das hat auch den Vorteil, das beim Umbenennen des Tabellenblattes der vba-CodeName sich nicht verändert!
Vielleicht hilft das.
Gruß von Luschi
aus klein-Paris

Anzeige
...Noch besser ist, wenn du ...
15.12.2012 19:05:28
Luc:-?
…diesen xlinternen Blattnamen auch änderst, Philipp,
denn der lässt sich nicht mit dem Mappennamen kombinieren. Falls es mal um mehrere (offene) Mappen geht, heißen sonst alle 1.Blätter Tabelle1.
Gruß + schö3AdWE, Luc :-?

AW: VBA Chart maximale Länge Diagrammdatenbereich
15.12.2012 19:06:01
Philipp
Hallo Luschi,
DAS ist des Rätsels Lösung :) Hab meinen Sourcecode nach deiner Idee umgeschrieben und siehe da... es funktioniert :)
Vielen Dank und Gruß,
Philipp

AW: VBA Chart maximale Länge Diagrammdatenbereich
16.12.2012 11:17:34
Beverly
Hi Philipp,
in Excel2010 kann man den Datenbereich auch anders zusammensetzen, ohne direkt auf den Blattnamen Bezug zu nehmen (angenommen die Werte stehen in A1, A3, A5 usw. des 1. Tabellenblattes):
Sub Dia()
Dim rngBereich As Range
Dim lngZeile As Long
For lngZeile = 1 To 34 Step 2
If rngBereich Is Nothing Then
Set rngBereich = Worksheets(1).Cells(lngZeile, 1)
Else
Set rngBereich = Union(rngBereich, Worksheets(1).Cells(lngZeile, 1))
End If
Next lngZeile
With Charts(1)
.SetSourceData Source:=rngBereich
End With
End Sub
Dennoch sind folgende generellen Punkte zu beachten:
1. Die Datenreihenformel darf nicht mehr als 17 unterschiedliche getrennte Datenbereiche umfassen.
2. Unter der Voraussetzung, dass der Tabellenblattname maximal 31 Zeichen lang sein darf, kann die Datenreihenformel 1263 Zeichen lang sein, bzw. 1365 Zeichen, falls der Tabellenblattname Leerzeichen enthält. Bei dieser Zeichenanzahl ist die Länge das Datenreihennamens (der ja auch in die Datenreihenformel mit eingeht) unberücksichtigt
3. die Länge des Datenreihennamens darf 255 Zeichen nicht übersteigen


Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige