ich versuche mich gerade an einer Diagrammauswertung per VBA, die von den Zeilen unabhängig ist.
Prinzipiell klappt das auch schon mal ganz gut.
Ich habe einmal eine Beispieldatei hochgeladen:
https://www.herber.de/bbs/user/74338.xls
Alle wichtigen Infos habe ich in dieser Datei belassen.
So stehen im Tabellenblatt Jahre die aufbereiteten Summenzüge der entsprechenden Jahre, Kostenstellen (KSt) und Baulastträger (BLT).
Diese Basistabelle ist hinsichtlich der Zeilenanzahl dynamisch und wird über entspr. Auswertungen befüllt.
Ebenso die in Spalte B und C befindlichen Feldnamen.
Die dynamische Tabelle wird im Tabellenblatt Dia_dyn per Schaltfläche erstellt.
Hierzu liest das Makro den jeweils auszuwertenden BLT aus der Zelle A2 dieses Tabellenblattes aus und erstellt dadurch den zu betrachtenden Bereich.
Mit nachstehendem Programmcode:
Sub tglChart_click()
Dim intCol As Integer
Dim intRow As Integer
Dim aktWb As Workbook
Dim DiaQuelWs As Worksheet
Dim AktWs As Worksheet
Dim AktWsName As String
Dim DiaQuelName As String
Dim i As Long
Dim leereZeile As Long
Dim ch As Chart
Dim AnzBLT As Integer
Dim RangeStr As String
Dim BLT As String
Set aktWb = ActiveWorkbook
Set DiaQuelWs = aktWb.Worksheets("Jahre")
Set AktWs = aktWb.ActiveSheet
AktWsName = AktWs.Name
DiaQuelName = DiaQuelWs.Name & "!"
BLT = AktWs.Cells(2, 1).Text
With AktWs
If .ChartObjects.Count > 0 Then
.ChartObjects(1).Delete
End If
End With
intRow = DiaQuelWs.Cells(65536, 2).End(xlUp).Row 'Die letzte benutze Reihe (ohne Formelinhalte)
intCol = DiaQuelWs.Cells(10, 256).End(xlToLeft).Column 'Die letzte benutze Spalte
With DiaQuelWs
leereZeile = 14
For i = leereZeile To 65536
If .Cells(i, 2).Text = "" Then
leereZeile = i - 1
'tatsächlich leere Zeile ermitteln, ohne Formelinhalte
'Da im Bereich Formeln hinterlegt sind, die durch (xlUp) nicht als leere Zellen erkannt werden
Exit For
End If
Next i
AnzBLT = 0
RangeStr = ""
For i = 1 To leereZeile 'solange den Rangebereich festlegen, wie der Begriff vorhanden ist
If .Cells(i + 13, 2).Text = BLT Then
AnzBLT = AnzBLT + 1
RangeStr = RangeStr & ",B" & i + 13 & ":C" & i + 13 & ",E" & i + 13 & ":N" & i + 13
End If
Next i
RangeStr = Mid(RangeStr, 2) 'Rangebereich für die spätere, dyn. Zuordnung mit "SetSourceData"
End With
Set ch = AktWs.ChartObjects.Add(101, 30, 700, 360).Chart
With ch
.ChartType = xlColumnClustered
'dyn Bereich
.SetSourceData Source:=DiaQuelWs.Range(RangeStr), PlotBy:=xlColumn
.Location Where:=xlLocationAsObject, Name:="Dia_dyn"
End With
With ActiveSheet.ChartObjects(1)
With .Chart
.HasLegend = True
.Legend.Position = xlRight
With .ChartArea 'Diagrammfläche
.Fill.Patterned Pattern:=7 'Muster
.Interior.PatternColorIndex = 2 'Musterfarbe
.Interior.ColorIndex = 2 'Hintergrundfarbe
End With
With .PlotArea 'Zeichnungsfläche
.Interior.ColorIndex = 15 'Hintergrundfarbe
End With
End With
End With
Set DiaQuelWs = Nothing
'Excel_Funktionen_aktivieren (1)
End Sub
[size=8]Code eingefügt mit [url=http://vbahtml.origo.ethz.ch] VBA in HTML 2.2.1[/url][/size]habe ich die dynamische Erstellung des Diagramms soweit hinbekommen. Layout und Formatierungen erfolgen anschließend.
Was ich jedoch nicht hinbekomme ist die Aufnahme der Rubrikenachse x, sodass die Jahre, hier 2001 2011, ebenfalls mit übernommen werden.
Kann mir hier jemand den nötigen Gedankenanstoß
Gruß und danke für jeden Hinweis
Werner Brinkmann