Forums Neueste Beiträge
 

Formular mit Grafik: Serie auslesen, in Variable schreiben, dann als Punktbeschriftung verwenden

10/01/2010 - 15:37 von Marcel Büchi | Report spam
Hallo
A2000 / XP

In einer XY-Punktgrafik lassen sich die Punkte mit dem X, oder Y-Wert ganz
einfach beschriften.

Nàmlich mit:
MyChart.SeriesCollection(1).ApplyDataLabels xlDataLabelsShowLabel, False
oder:
MyChart.SeriesCollection(1).ApplyDataLabels xlDataLabelsShowValue, True

oder:

With MyChart
With .SeriesCollection(1).Points(1)
.HasDataLabel = True
.DataLabel.Text = "A-Nr.1275"
End With
End With

Das funktioniert alles - ist aber nicht genau das, was ich will.

Sondern:

Ich möchte gerne die momentan fest codierte "A-Nr.1275" durch die
Spaltenüberschrift der Kreuztabelle ersetzen.
Im Sinne von:
.DataLabel.Text = Spaltenüberschrift_der_Kreuztabelle

Wie kann ich die Spaltenüberschrift in einer Grafik für jeden Punkt in der
Grafik per VBA auslesen und als Variable dem .DataLabel.Text übergeben?

Im ToolTip, wenn ich mit der Maus über einen Punkt fahre, wird folgendes
angezeigt:

Reihe: "A-Nr. 1275" Datenpunkt "09.01.2010" Wert: 48.66

In diesem Falle entspricht "Reihe" = "Spaltenüberschrift". Dieser Wert
interessiert mich.

.DataLabel.Text = Reihe ????

Wie könnte man das lösen?

Vielen Dank
Marcel Büchi
 

Lesen sie die antworten

#1 Marcel Büchi
16/01/2010 - 19:13 | Warnen spam
Jede Zeile und jede Spalte per SQL aus der Datenmenge auslesen.
Wenn X die Zeitachse ist, jedem Datum aufsteigend eine Zahl von 1 bis ...
vergeben
Jedem Datum nur 1x eine Zahl geben, auch wenn z.B. zum gleichen Datum
mehrere Werte vorkommen.
Dann die Werte X und Y der SeriesCollection(X).Points(Y) übergeben.

Beispiel einer Kreuztabelle
Zeile Art.Nr-1 Art.Nr-27 Art.Nr-56 Art.Nr-81
1.1.2010 5
4
3.1.2010 7
5.1.2010 10

Beim Auslesen der Art.Nr. muss die Sortierung passen, damit die Reihenfolge
gleich ist wie in der Kreutabelle die Spaltenüberschrift.
Den Artikel-Nr. eine laufende Nr. vergeben von 1 bis ... (Anzahl Spalten)
oder bessert gesagt: .SeriesCollection.Count


Hier ein Code Schnipsel

'strSQL liest das letzte Buchungsdatum sowie die AuftragsNr aus der Abfrage
Auswertung1
'Auswertung1 macht nichts anderes, als die Datenmenge zu filtern und
bereitzustellen.

strSQL = "SELECT Auswertung1.Com, Auswertung1.LetztesStdBuchungsdatum,
Auswertung1.ZeitSumme, Auswertung1.Kombi, Auswertung1.Dokumenttyp,
Auswertung1.Auftragsart, Auswertung1.Leistungsart,
Auswertung1.GeschaeftsbereichKurz, Auswertung1.KombiRedaktor FROM
Auswertung1 ORDER BY Auswertung1.Com, Auswertung1.LetztesStdBuchungsdatum;"


Set DB = CurrentDb()
Set Abfrage = DB.OpenRecordset(strSQL)
AbfrageRecordCount = Abfrage.RecordCount
Abfrage.MoveFirst

AuftragsNr = Abfrage!Com
BuchungsdatumX = Abfrage!LetztesStdBuchungsdatum
Spaltenzàhler = 1
ZeilenNr = 1


'strSQL2 findet das Buchungsdatum in der Tabelle TempTabGrafik und liest
die dazugehörende ZeilenNr. aus

strSQL2a = "SELECT TempTabGrafik.Buchungsdatum, TempTabGrafik.Zeile FROM
TempTabGrafik "
strSQL2b = "WHERE [Buchungsdatum] = #" & Format$(BuchungsdatumX,
"mm-dd-yyyy") & "#"

strSQL2 = strSQL2a & strSQL2b


Set Abfrage3 = DB.OpenRecordset(strSQL2)
Abfrage3.MoveFirst
ZeilenNr = Abfrage3![Zeile]
Abfrage3.Close
strSQL2 = ""

On Error Resume Next

Set objChart = Grafik.Object

With objChart

'Zuerst alle Labels löschen. Nicht unbedingt vollkommen richtig.
Deshalb: On Error Resume Next
m = 1
o = 1
ZàhlerEndeQ = .SeriesCollection.Count
ZàhlerEndeR = .SeriesCollection(1).Points.Count

For ZàhlerStartN = 1 To ZàhlerEndeQ

For ZàhlerStartP = 1 To ZàhlerEndeR
.SeriesCollection(m).Points(o).HasDataLabel = False
o = o + 1
Next
m = m + 1
o = 1
Next

For Schleifenzàhler = 1 To AbfrageRecordCount

With .SeriesCollection(Spaltenzàhler).Points(ZeilenNr)

.HasDataLabel = True

End With

With .SeriesCollection(Spaltenzàhler).Points(ZeilenNr)

.DataLabel.Text = AuftragsNr

End With

With .SeriesCollection(Spaltenzàhler)
.DataLabels.Font.Size = SchriftGroesse 'Eine Variable aus dem
Formular gelesen
End With


Abfrage.MoveNext
AuftragsNr = Abfrage!Com
BuchungsdatumX = Abfrage!LetztesStdBuchungsdatum


strSQL2a = "SELECT TempTabGrafik.Buchungsdatum, TempTabGrafik.Zeile FROM
TempTabGrafik "
strSQL2b = "WHERE [Buchungsdatum] = #" & Format$(BuchungsdatumX,
"mm-dd-yyyy") & "#"

strSQL2 = strSQL2a & strSQL2b


Set Abfrage3 = DB.OpenRecordset(strSQL2)
Abfrage3.MoveFirst


ZeilenNr = Abfrage3![Zeile]
Abfrage3.Close
strSQL2 = ""
Spaltenzàhler = Spaltenzàhler + 1

Next

End With

Abfrage.Close
Set DB = Nothing

Mein Code ist nicht schön programmiert - Spezialisten werden möglicherweise
die helle Freude daran haben. Aber es làuft. Das ist die Hauptsache.
Schöner wàre z.B. wenn die Datum mit der fortlaufenden Nr. anfangs der
Routine in ein Array geschrieben würde. Ich schreibe sie z.Z. in eine
temporàre Tabelle (ohne Datums-Duplikate und dann, aufsteigend sortiert, mit
Zahlen von 1 bis ...x in die zweite Spalte versehen). So könnte man Abfrage3
eliminieren. Habe damit aber zu wenig Erfahrung.

Marcel



"Marcel Büchi" schrieb im Newsbeitrag
news:
Hallo
A2000 / XP

In einer XY-Punktgrafik lassen sich die Punkte mit dem X, oder Y-Wert ganz
einfach beschriften.

Nàmlich mit:
MyChart.SeriesCollection(1).ApplyDataLabels xlDataLabelsShowLabel, False
oder:
MyChart.SeriesCollection(1).ApplyDataLabels xlDataLabelsShowValue, True

oder:

With MyChart
With .SeriesCollection(1).Points(1)
.HasDataLabel = True
.DataLabel.Text = "A-Nr.1275"
End With
End With

Das funktioniert alles - ist aber nicht genau das, was ich will.

Sondern:

Ich möchte gerne die momentan fest codierte "A-Nr.1275" durch die
Spaltenüberschrift der Kreuztabelle ersetzen.
Im Sinne von:
.DataLabel.Text = Spaltenüberschrift_der_Kreuztabelle

Wie kann ich die Spaltenüberschrift in einer Grafik für jeden Punkt in der
Grafik per VBA auslesen und als Variable dem .DataLabel.Text übergeben?

Im ToolTip, wenn ich mit der Maus über einen Punkt fahre, wird folgendes
angezeigt:

Reihe: "A-Nr. 1275" Datenpunkt "09.01.2010" Wert: 48.66

In diesem Falle entspricht "Reihe" = "Spaltenüberschrift". Dieser Wert
interessiert mich.

.DataLabel.Text = Reihe ????

Wie könnte man das lösen?

Vielen Dank
Marcel Büchi


Ähnliche fragen