PDA

Vollständige Version anzeigen : Doppelsäulen im Diagramm einfärben


Broom
17.03.2013, 16:32
Hallo,
mit nachfolgender Anweisung werden die Diagrammsäulen entsprechend den Farbwerten in der Tabelle „Beim Formatieren“ eingefärbt. Dies funktioniert bei Einfachsäulen, wie muss man den Code anpassen, damit dies auch bei Doppelsäulen funktioniert?
Dim cht As Graph.Chart
Dim lngFarbwert As Long
Dim I As Integer

Set cht = Me.Diagramm2.Object

For I = 1 To cht.SeriesCollection(1).Points.Count
lngFarbwert = _
Nz(DLookup("[Farbwert]", "tb_Farbtabelle", "[FarbID] = " & I), 0)
cht.SeriesCollection(1).Points(I).Interior.Color = lngFarbwert
Next I
Set cht = Nothing

Marsu65
18.03.2013, 00:44
Hallo Heinrich,
wenn du zwei Datensatzreihen hast, hast du zwei SeriesCollection ...

Du müsstest folglich eine Schleife für die (beiden) SeriesCollection einbauen.

Broom
18.03.2013, 16:48
Hallo Marsu,
ich habe folgendes probiert:
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
Dim cht As Graph.Chart
Dim lngFarbwert As Long
Dim i As Integer
Dim F As Integer

Set cht = Me.DiagrammUb.Object
For i = 1 To cht.SeriesCollection(1).Points.Count
lngFarbwert = _
Nz(DLookup("[Farbwert]", "tb_Farbtabelle", "[FarbID] = " & i), 0)
cht.SeriesCollection(1).Points(i).Interior.Color = lngFarbwert
Next i
For F = 1 To cht.SeriesCollection(2).Points.Count
lngFarbwert = _
Nz(DLookup("[Farbwert2]", "tb_Farbtabelle", "[FarbID] = " & F), 0)
cht.SeriesCollection(2).Points(F).Interior.Color = lngFarbwert
Next F
Set cht = Nothing

Me!BezKrit1b.Visible = Not IsNull(Me!Krit1b)
Me.DiagrammUb.Requery
End Sub

Leider erhalte ich den Hinweis: Die SeriesCollection-Eigenschaft des Chart-Objektes kann nicht zugeordnet werden.
Was müßte ich da ändern?

Marsu65
18.03.2013, 19:32
Hallo Heinrich,
da man den Diagramaufbau nicht kennt und du nicht verrätst, in welcher Zeile der 'Hinweis' kommt, wirst du heute Abend ohne Kekse ins Bett geschickt. ;)

Broom
25.03.2013, 11:37
Hallo Marsu,
ohne Kekse ins Bett zu gehen hat mich doch hart getroffen. Davon musste ich mich erst erholen.;)
Ich habe endlich Zeit gefunden eine abgespeckte Variante zu erstellen und als Beispiel mal angefügt. Wenn man den Bericht öffnet funktionieren die ersten beiden Datensätze, beim 3ten Datensatz erscheint jedoch der beschriebene Fehlerhinweis.
Vielleicht kannst Du erkennen woran dies liegt.

Marsu65
25.03.2013, 12:04
Vielleicht kannst Du erkennen woran dies liegt
Meiner einer könnte vielleicht etwas erkennen, wenn die DB im mdb-Format vorläge. ;)
Somit muss wohl jemand anderes für mehr Erkenntnis sorgen.

Broom
25.03.2013, 14:01
Da bin ich (bzw. Access 2010) flexibel und erstelle es gerne im mdb-Format.

Marsu65
25.03.2013, 17:33
Kleiner Scherzkeks ... ?!
Kommentiere mal die Farbzuweisung
Set cht = Me.DiagrammUb.Object
For i = 1 To cht.SeriesCollection(1).Points.Count
lngFarbwert = _
Nz(DLookup("[Farbwert]", "tb_Farbtabelle", "[FarbID] = " & i), 0)
cht.SeriesCollection(1).Points(i).Interior.Color = lngFarbwert
Next i
For F = 1 To cht.SeriesCollection(2).Points.Count
lngFarbwert = _
Nz(DLookup("[Farbwert2]", "tb_Farbtabelle", "[FarbID] = " & F), 0)
cht.SeriesCollection(2).Points(F).Interior.Color = lngFarbwert
Next F
Set cht = Nothing
im Code aus, starte den Bericht und schau dir mal das 4. Diagramm an ...
Wieviele Datenreihen siehst du? Ich sehe nur eine!
Wen wundert es, dass es knallt, wenn du im Code versuchst eine zweite Datenreihe zu verarbeiten, die gar nicht da ist?

Daher schrieb ich ja auch
... eine Schleife für die (beiden[???]) SeriesCollection einbauen.
Eine Schleife ist etwas anderes als reine Codewiederholung.
So könnte es z.B. aussehen:
Dim i As Integer
Dim Serie As Integer

Set cht = Me.DiagrammUb.Object

For Serie = 1 To cht.SeriesCollection.Count
For i = 1 To cht.SeriesCollection(Serie).Points.Count
lngFarbwert = _
Nz(DLookup("[Farbwert]", "tb_Farbtabelle", "[FarbID] = " & i), 0)
cht.SeriesCollection(1).Points(i).Interior.Color = lngFarbwert
Next i
Next Serie

Broom
25.03.2013, 20:07
Hallo Marsu,
die Ausgangssituation war so, dass die Säulen entsprechend der Reihenfolge in der Tabelle „tb_Farbtabelle“ eingefärbt werden. D.h. mit der Tabelle kann ich den Farbwert der Säule x festlegen, auch wenn für eine Säulennr mal kein Wert vorhanden ist. In meiner simplen Denkweise dachte ich man könnte für die zweite Datenreihe genauso die Farbwerte festlegen und wenn mal kein Wert vorhanden ist, wird dieser übersprungen.
Ich habe nun deinem Vorschlag übernommen und es erscheint jetzt kein Fehlerhinweis mehr aber die 2te Datenreihe wird farblich nicht angepasst.

Marsu65
25.03.2013, 21:39
Tja nun ... kopieren ist nicht alles ;)
tausche cht.SeriesCollection(1).Points(i).Interior.Color = lngFarbwert
gegen
cht.SeriesCollection(Serie).Points(i).Interior.Color = lngFarbwert

Broom
26.03.2013, 11:00
Jetzt werden alle Säulen eingefärbt, allerdings erhalten die beiden Säulen nebeneinander jeweils immer die gleiche Farbe. Eigentlich sollten Sie unterschiedlich und bestimmbar sein.
Kann man nicht erst die erste Datenreihe farblich anhand eines Datenfeldes „Farbwert1“ aus der Tabelle anpassen und im Anschluss die zweite Datenreihe anhand „Farbwert2“ einfärben?

Marsu65
26.03.2013, 11:30
Heinrich,
Kann man nicht erst die erste Datenreihe farblich anhand eines Datenfeldes „Farbwert1“ aus der Tabelle anpassen und im Anschluss die zweite Datenreihe anhand „Farbwert2“ einfärben?
Könnte man. Jedoch wird man dabei auf das Problem stoßen, dass es kein Tabellenfeld Farbwert1 gibt!

Wo bleibt eigentlich deine Eigeninitiative, selbst etwas zu enwickeln?
Willst du dir ewig alles vorkauen lassen?

Dim Serie As Integer
Dim sFarbfeld As String

Set cht = Me.DiagrammUb.Object

For Serie = 1 To cht.SeriesCollection.Count
If Serie = 1 Then sFarbfeld = "[Farbwert]" Else sFarbfeld = "[Farbwert2]"
For i = 1 To cht.SeriesCollection(Serie).Points.Count
lngFarbwert = _
Nz(DLookup(sFarbfeld, "tb_Farbtabelle", "[FarbID] = " & i), 0)
cht.SeriesCollection(Serie).Points(i).Interior.Color = lngFarbwert
Next i

Broom
26.03.2013, 12:22
Hallo Marsu,
Du bist einfach Spitze.
Dieser Ansatz ist verständlich, aber ehrlich gesagt darauf wäre ich nicht gekommen.
Irgendwie fehlt da was bei mir.
Vielen Dank für Deine Hilfe.