Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Layout: unterschiedlich farbliche Kennung in Endlosformularen

Begonnen von Paulemeister, April 09, 2015, 14:21:07

⏪ vorheriges - nächstes ⏩

Paulemeister

Hallo zusammen,

Ich habe ein paar Fragen zur Layoutgestaltung meines kleinen Endlosformulars, welches ich als Datei mal bildlich angehangen habe.
Dargestellt werden bestimmte Objekte, die tagesbezogen in bestimmten Mengen geworfen werden. Jetzt wäre es für den Nutzer hilfreich, wenn wenigstens zwischen zwei unterschiedlichen Tagen auch unterschiedliche Farbkennungen realisiert werden könnten.

Daher Frage1:
Wie kann ich Access klarmachen, dass es bitte eine farbliche Unterscheidung zwischen den verschiedenen Tagen vornimmt?

Frage2:
Ist etwas kniffliger. Ich würde gerne, dass tagesbezogen die 14 größten Mengen aus der Spalte "PLIS EV" irgendwie hervorgehoben werden, damit der Nutzer bei den restlichen Objekten, welche weniger Mengen haben, das Kreuzchen bei "Nicht geworfen" machen kann? Am praktischsten wäre es natürlich, wenn das ganze mit Hilfe einer VBA-Routine abliefe, aber ich bin immer der Meinung, dass der Nutzer auch selbst überlegen sollte.

Ich hoffe, ihr konntet mir folgen. Ansonsten bin ich offen für Kritik und Fragen.

Danke schon mal für eure Bemühungen.

MfG

Der Paulemeister

MaggieMay

Hallo,

du kannst in der Abfrage eine lfd. Nummer pro Tag erzeugen, um die x höchsten Werte per bedingter Formatierung bspw. in Fettschrift darzustellen.

In einer weiteren Spalte kannst du die Tage durchnummerieren, um auch hier per bedingter Formatierung alternierende Farben einzusetzen.
Freundliche Grüße
MaggieMay

Paulemeister

So ich war teilweise erfolgreich.

Also wie im neuen Bild ersichtlich, konnte ich die Tage schon mal unterschiedlich gestalten. Ging aber auch ganz gut über die bedingte Formatierung in der LAYOUT-Ansicht.

Dort habe ich dann auch mit der Funktion "KGRÖSSTE" versucht herumzuhantieren, aber ohne Erfolg. Selbst bei Excel hat das irgendwie nicht funktioniert.

Hier nochmal meiner Intension:

Ich möchte, dass für einen Tag, der nun schon farbliche auseinanderzuhalten ist, auch noch die Objekte mit den 14 meisten Mengenzahlen so formatiert werden, dass der Anwender die restlichen Objekte am Ende als "Nicht geworfen" setzen kann.

Ich danke für eure Bemühungen

Grüße Paulemeister

MaggieMay

ZitatDort habe ich dann auch mit der Funktion "KGRÖSSTE" versucht herumzuhantieren
Wo genau und was ist das für eine Funktion? Wir sind hier bei Access und nicht bei Excel.

Was ist aus meinem Vorschlag mit der lfd. Nummer pro Tag geworden?
Freundliche Grüße
MaggieMay

Paulemeister

Ich habe versucht meine rudimentären Excel-Fähigkeiten im Access anzuwenden, da die Anwendung "bedingte Formatierung" sich doch sehr ähneln. Bei Excel kann man mit dieser Funktion aus einem Feld sich den höchsten Wert wiedergeben lassen und je nach Variierung auch den zweit, fünft oder vierzehnt höchsten. Sei´s wie´s sei.

Dein Ansatz mit der Abfrage leuchtet mir nicht ganz ein. Nur um dich richtig zu verstehen:

Ich soll einem Datum, welches im Hintergrund ehe einen Zahlenwert zugewiesen bekommt nochmal eine weitere laufende Nummer zuweisen? Wäre das nicht doppeltgemoppelt?
Meinst du etwa, dass ich auf den Tag bezogen eine Art Rangfolge anlegen soll?

Sorry wenn ich etwas auf dem Schlauch stehe

Gruß

Paulemeister

MaggieMay

ZitatMeinst du etwa, dass ich auf den Tag bezogen eine Art Rangfolge anlegen soll?
Ja, genauso meine ich das. Wie sonst willst du die 14 höchsten Werte erkennen?

Wie hast du das denn mit der bedingten Formatierung gelöst, wie sieht dort das Kriterium aus?
Freundliche Grüße
MaggieMay

Paulemeister

Also ich habe das mit der Abfrage logisch verstanden, nur bei der Umsetzung muss ich wohl noch etwas Hirnschmalz investieren. Ich versuche mich übers Wochenende.

Also anbei noch der Pfad, wie ich die bedingte Formatierung für die Tage vorgenommen habe:

Als erstes bin ich in die Layout-Ansicht des Formulars gegangen und habe die umzufärbenden Felder markiert. Danach bin ich im Menüband auf die "bedingte Formatierung" unter "Steuerelementformatierung" gegangen. (siehe Bild1)

Im sich öffnenden Fenster habe ich dann meine neu definierte Regel mit "wochentag()" formuliert und die daraus folgende Formatierung.(siehe Bild2 und Bild3)

Es gibt auch noch den Unterpunkt "mit anderen Datensätzen vergleichen". Da könnte ich mir dann den Ansatz mit den laufenden Nummern gut vorstellen.

Ich versuche mich mal und melde mich Anfang nächster Woche nochmal.

Danke schön bis hier her.

Schönes WE

Paulemeister

MaggieMay

#7
Zitatanbei noch der Pfad, wie ich die bedingte Formatierung für die Tage vorgenommen habe
Das mit den Wochentagen ist eine nette Idee, funktioniert aber nur, wenn es keine Lücken gibt. Folgt bspw. auf Dienstag der Donnerstag, so gibt es keine Unterscheidung.

Zeig doch mal den SQL-Code der Abfrage für das Formular, dann kann ich dir am konkreten Beispiel zeigen, wie ich das meine.

PS:
ZitatEs gibt auch noch den Unterpunkt "mit anderen Datensätzen vergleichen". Da könnte ich mir dann den Ansatz mit den laufenden Nummern gut vorstellen.
Nein, wenn du eine lfd. Nummer hast, brauchst du nur den Wert zu vergleichen:
Feldwert ist: < 15
Freundliche Grüße
MaggieMay

Paulemeister

Hallo MaggieMay,

Sorry war krank und antworte deshalb jetzt erst. Ich habe dir meinen SQL-Code mal kopiert. Ist etwas lang durch die anfänglich umständlich gewählte Namenskonvention. Ich hoffe du kannst trotzdem etwas damit anfangen:

SELECT tbl_AktivSchluessel.dat_AktivSchluessel, tbl_basis_beilage.bez_intern_basis_beilage, tbl_AktivSchluessel.schluessel_AktivSchluessel,
tbl_AktivSchluessel.KDF_AktivSchluessel, tbl_AktivSchluessel.PLISmengeSV_AktivSchluessel, tbl_AktivSchluessel.PLISmengeEV_AktivSchluessel,
tbl_AktivSchluessel.ISTmengeSV_AktivSchluessel, tbl_AktivSchluessel.ISTmengeEV_AktivSchluessel, tbl_AktivSchluessel.fach_AktivSchluessel,
tbl_AktivSchluessel.sonpreis_AktivSchluessel, tbl_AktivSchluessel.nichtgew_AktivSchluessel
FROM tbl_basis_KDF INNER JOIN (tbl_basis_beilage INNER JOIN tbl_AktivSchluessel ON tbl_basis_beilage.id_basis_beilage = tbl_AktivSchluessel.zu_id_basis_beilage)
ON tbl_basis_KDF.id_basis_KDF = tbl_basis_beilage.zu_id_basis_KDF
ORDER BY tbl_AktivSchluessel.dat_AktivSchluessel DESC , tbl_basis_KDF.versandart_basis_KDF, tbl_AktivSchluessel.schluessel_AktivSchluessel, tbl_basis_beilage.bez_KDF_basis_beilage;


Dein Ansatz mit den Lücken bei den Wochentagen hat sich schon bestätigt. Sobald ein Tag in der Woche frei ist und keine Eingaben getätigt werden, können die unterschiedlichen Tage nicht mehr auseinandergehalten werden.

Die Rangfolge für die Mengenanzahlen habe ich auch noch nicht hinbekommen. Ich muss in der Abfrage eine Berechnung anstellen, die die einzelnen tagesbezogenen Werte vergleicht und gleichzeitig eine Rangfolge herstellt. Da verlassen mich leider meine MS-Access-Fähigkeiten.

Der einzige Einfall, der mir noch kam, ist der QuickAndDirty-Ansatz, die Mengenanzahlen pro Tag aufsteigend zu sortieren und zu sagen, gebe mir die 14 ersten Werte wieder. Aber über den Ansatz hinaus bin ich noch nicht gekommen.

So jetzt habe ich mich aber verquatscht.

Ich hoffe ich habe dich nicht komplett verwirrt.

Mit freundlichen Grüßen

Paulemeister

MaggieMay

Meine Idee dazu wäre folgende:SELECT
tbl_AktivSchluessel.dat_AktivSchluessel, tbl_basis_beilage.bez_intern_basis_beilage, tbl_AktivSchluessel.schluessel_AktivSchluessel,
tbl_AktivSchluessel.KDF_AktivSchluessel, tbl_AktivSchluessel.PLISmengeSV_AktivSchluessel, tbl_AktivSchluessel.PLISmengeEV_AktivSchluessel,
tbl_AktivSchluessel.ISTmengeSV_AktivSchluessel, tbl_AktivSchluessel.ISTmengeEV_AktivSchluessel, tbl_AktivSchluessel.fach_AktivSchluessel,
tbl_AktivSchluessel.sonpreis_AktivSchluessel, tbl_AktivSchluessel.nichtgew_AktivSchluessel,
[color=blue](select Count(*) From (Select Distinct dat_AktivSchluessel As dat From tbl_AktivSchluessel) As s1 Where s1.dat <= tbl_AktivSchluessel.dat_AktivSchluessel) AS dat_nr,
(select Count(*) From (Select PLISmengeEV_AktivSchluessel As PLIS_EV From tbl_AktivSchluessel As t WHERE t.dat_AktivSchluessel = tbl_AktivSchluessel.dat_AktivSchluessel) As s2 Where s2.PLIS_EV <= tbl_AktivSchluessel. PLISmengeEV_AktivSchluessel) AS PLIS_EV_nr[/color]
FROM tbl_basis_KDF INNER JOIN
(tbl_basis_beilage INNER JOIN tbl_AktivSchluessel
ON tbl_basis_beilage.id_basis_beilage = tbl_AktivSchluessel.zu_id_basis_beilage)
ON tbl_basis_KDF.id_basis_KDF = tbl_basis_beilage.zu_id_basis_KDF
ORDER BY
tbl_AktivSchluessel.dat_AktivSchluessel DESC ,
tbl_basis_KDF.versandart_basis_KDF, tbl_AktivSchluessel.schluessel_AktivSchluessel, tbl_basis_beilage.bez_KDF_basis_beilage;

(natürlich ungetestet)
Freundliche Grüße
MaggieMay

Paulemeister

Hallo Maggie,

Also die Select-Anweisung für den Tag hat funktioniert und auch die bedingte Formatierung dazu.

Die Select-Anweisung zur Erstellung der Rangfolge ist etwas missglückt.

(select Count(*) From (Select PLISmengeEV_AktivSchluessel As PLIS_EV From tbl_AktivSchluessel As t WHERE t.dat_AktivSchluessel = tbl_AktivSchluessel.dat_AktivSchluessel) As s2 Where s2.PLIS_EV <= tbl_AktivSchluessel.PLISmengeEV_AktivSchluessel) AS PLIS_EV_nr

Ergebnis war, dass mir die Spalte mit den höchsten Mengen auch den höchsten Rang wiedergibt. Leider nicht aufs Datum bezogen, sondern auf den kompletten Datensatz (siehe Bild1).

Gibt es die Möglichkeit eine Art Schleifenlogik einzubauen? evtl. mit VBA?
Ich sage der Schleife, laufe so lange, bis du alle Daten eines bestimmten Tages durchlaufen hast. Wenn du eine Mengenzahl hast, vergleiche sie mit der vorherigen. Bist du größer, bleibe beim Rang, bist du kleiner, gehe einen Rang zurück. War jetzt nur noch so eine fixe Idee von mir.

MfG

Paulemeister

MaggieMay

Hi,

was die Rangfolge betrifft, so brauchst du nur den Vergleichsoperator auf ">=" zu ändern.

Was das Datum betrifft, so sollte es durch das Kriterium WHERE t.dat_AktivSchluessel = tbl_AktivSchluessel.dat_AktivSchluesselsichergestellt sein, dass die Reihenfolge nur innerhalb desselben Datums ermittelt wird.

Wenn du eine Beispiel-DB hochladen könntest, ließe sich das daran mal austesten.

PS:
VBA-Code brauchst du dazu nicht, das muss mit einer SQL-Abfrage lösbar sein.
Freundliche Grüße
MaggieMay

Paulemeister

Also mit Beispieldatenbank wird schwierig, wegen Verschwiegenheitspflicht usw. Ist nämlich als Anwendung im Unternehmen gedacht.
Ich schicke dir mal eine Exceltabelle voll Zufallszahlen, welche als Mengen angenommen werden können, die du in eine Datenbank kopieren kannst.

Ich kann dir nur so viel sagen, dass die Rangfolge sich nicht auf den Tag bezieht, sondern auf den kompletten Datensatz. (siehe letzter Eintrag Bild1)

Grüße

der Paulemeister

MaggieMay

Zitatwegen Verschwiegenheitspflicht usw.
Eine Beispiel-DB enthält stets nur die Objekte, die unbedingt benötigt werden um einen konkreten Fall nachzustellen, sowie anonymisierte Testdaten. Logos etc. können natürlich ebenso entfernt werden. Aber mit den Testdaten war mir auch schon geholfen.

Ich bin jetzt auf folgende Lösung gekommen:SELECT t_test.*,
DCount("*", "q_tabdat", "tabdat <= " & cdbl(t_test.tabdat)) AS dat_nr,
DCount("*", "t_test", "tabdat = " & cdbl(t_test.tabdat) & " AND PLIS_EV >= " & t_test.PLIS_EV) AS PLIS_EV_nr
FROM t_test
ORDER BY t_test.tabdat, plis_ev  DESC;


q_tabdat:
SELECT DISTINCT tabdat FROM t_test;

Die DLookUps sind natürlich eine Performance-Bremse, aber mit den Unterabfragen habe ich das leider nicht hinbekommen.
Vielleicht kann sich noch jemand anderes daran versuchen.
Freundliche Grüße
MaggieMay

Paulemeister

Hallo Maggie,

Ich habe deine Vorschläge in meine Datenbank integriert und es klappt.
Die Zwischenabfrage ist zwar etwas lästig, aber ich denke so leistungsstark muss die Datenbank nicht sein, dass sie das nicht verträgt.
Ich danke dir für die konspirative Zusammenarbeit und vlt. bis bald.

MfG

Paulemeister