|
Balkendiagramm mit Endlosformularen Bei der Darstellung von zeitlichen Abläufen hat sich das Balken- oder Gant-Diagramm (ähnlich wie es MS Project verwendet wird) bewährt. Bevor man nun versucht eine Verknüpfung von MS Access und MS Project (o.ä.) zu implementieren, sollte man einfachere - und meist ausreichende - Möglichkeiten in Betracht ziehen. Eine dieser Möglichkeiten ist nachfolgende beschrieben. Lösungsansatz Der Lösungsansatz beruht auf der Idee von G. Ritter (KnowHow-Datenbank) in einem Endlosformular, in Abhängigkeit von einem Wert im Datensatz die Hintergrundfarbe eines Textfeldes zu ändern. Im einfachsten Fall ist ein Balken in einem Balkendiagramm ein String, dessen Länge (Anzahl Zeichen) die darzustellende Größe widerspiegelt.
Beispiel 1
Monat Produktion
in Stück
01.2000 10 ##########
02.2000 20 ####################
03.2000 15 ###############
Zur Darstellung von Abläufen kann eine ähnliche Darstellung erfolgen.
Beispiel 2 Aktivität Dauer 01.01. 21.01. 05.02. 20.02. 02.03. Design 20 Tage #################### Implementierung 30 Tage ############################## Test 25 Tage #########################Für einfache Anwendungen reicht diese Form der Darstellung vollkommen aus. Voraussetzungen Z.Zt. sind mir keine bekannt. Implementierung Wie beim Lösungsansatz zu erkennen ist, geht es im Grund lediglich darum den Balken-String zu erstellen und diesen dann in geeigneter Form auf einem Formular darzustellen. Geeignete Form meint, daß nicht gerade das Rauten-Zeichen verwendet werden sollte, sondern ein Zeichen das mehr nach einem Balken aussieht. G. Ritter schlägt in seinem Beispiel den Font Terminal und das Zeichen ² (hochgestellte 2) vor. Wahlweise kann auch das Zeichen Û (U mit Dach) verwendet werden. Um einen String für das Beispiel 1 zu erstellen, benötigt man folgende Funktion: Public Function GetBalken(Anz As Long) As String
'
' GetBalken()
'
' Erstellt einen String der die Anzahl (Anz)
' von Zeichen enthält.
'
' IN: Anz Anzahl der Zeichen, die im Sting
' enthalten sein sollen.
' OUT: Sting mit Anz-Zeichen
'
Dim RetStr As String
'
' Sting der Länge "Anz" erzeugen
'
RetStr = String(Anz, "Û")
'
' Rückgabe des Strings
'
GetBalken = RetStr
End Function
Um den String für den Balken aus dem 2. Beispiel zu erstellen, muß die Funktion so aussehen:
Public Function GetBalkenBereich(AVon As Long, ABis As Long) As String
'
' GetBalkenBereich()
'
' Erstellt einen String der die Anzahl ABis - AVon
' von Zeichen enthält.
' Die Zeichen werden ab der Position AVon in den String eingetragen.
'
' IN: AVon Startposition der Zeichen
' ABis Endposition der Zeichen
' OUT: Sting mit Anz-Zeichen
'
Dim i As Integer
Dim RetStr As String
'
' Bis zu Startposition werden Leerzeichen
' in den String eingetragen
'
RetStr = String(AVon, " ")
'
' Ab der Startposition werden ABis - AVon
' Zeichen in den String eingetragen.
'
RetStr = RetStr & String(ABis - AVon, "Û")
'
' Rückgabe des Strings
'
GetBalkenBereich = RetStr
End Function
Der Einfachheit halber kann man diese Funktionen in einer Abfrage verwenden (aufrufen).
Das könnte (in der SQL-Ansicht) dann so aussehen:
SELECT Statistik.ID, Statistik.Monat, Statistik.Anzahl,
GetBalken( Anzahl ) AS Balken
FROM Statistik;
bzw.
SELECT Statistik.ID, Statistik.Monat, Statistik.AVon, Statistik.ABis,
GetBalkenBereich(Statistik.AVon, Statistik.ABis) AS Balken
FROM Statistik;
In einem Formular oder Bericht muß nun lediglich ein Textfeld vorhanden sein, welches als Font den o.g. zugewiesen bekommt und dessen Hintergrund-
und Rahmenart auf Transparent eingestellt ist. Diesem Textfeld wird als Steuerelementinhalt die Spalte
Balken der Abfrage zugewiesen.
Um das Ganze ein wenig professioneller aussehen zu lassen, kann man die Balken in Abhängigkeit vom repräsentiertem Wert verschiedenfarbig darstellen (womit wir vollends bei der Idee von G. Ritter sind). Um die Beschreibung ein wenig abzukürzen beziehe ich mich nachfolgend nur aus Beispiel 1. Im Formular/Bericht muß hierfür für jede darzustellende Farbe ein Textfeld mit den zuvor genannten Eigenschaften angelegt werden. Sinnigerweise wird jedem Textfeld eine andere Textfarbe zugeordnet. Alle diese Textfelder werden - im Formular/Bericht Entwurf - übereinander gelegt. Für jede darzustellende Farbe muß eine Funktion implementiert werden, welche entscheidet ob für den übergebenen Wertebereich ein Balken-String erstellt werden muß. Im einfachsten Fall könnte das ungefähr so aussehen: Public Function GetBalkenRot(Anz As Long) As String
If Anz <= 20 Then
GetBalkenRot = GetBalken(Anz)
End If
End Function
Public Function GetBalkenHellrot(Anz As Long) As String
If Anz > 20 And Anz <= 40 Then
GetBalkenHellrot = GetBalken(Anz)
End If
End Function
Die Abfrage zu Ermittlung der Daten sieht dann so aus:
SELECT Statistik.ID, Statistik.Monat, Statistik.Anzahl,
GetBalkenRot( Anzahl ) AS BalkenRot,
GetBalkenHellrot( Anzahl ) AS BalkenHellrot,
GetBalkenGelb( Anzahl ) AS BalkenGelb,
GetBalkenHellgruen( Anzahl ) AS BalkenHellgruen,
GetBalkenGruen( Anzahl ) AS BalkenGruen
FROM Statistik;
Nun muß den Textfeldern im Formular/Bericht lediglich die korrekte Spalte als Steuerelementinhalt
zugewiesen werden (z.B. das Textfeld welches die Textfarbe rot hat, die Spalte BalkenRot).
Durch eine Frage im MS-Office-Forum wurde ich darauf aufmerksam, daß sich mit dem Font Terminal lediglich Werte von max. 100 - 120 darstellen lassen. Bei größeren Werten muß das Formular mit einem horizontalen Scrollbalken versehen werden, womit der entsprechende Balken ist nicht komplett im sichtbaren Bereich des Formulars zu sehen ist. Aber es währe nicht das MS-Office-Forum, wenn es hierfür keine Lösung gegeben hätte. Sascha Trowitzsch (herzlichen Dank) hat uns einen Font erstellt, der die Darstellung von größeren Werten erlaubt. Zum Vergleich: In dem Bereich, in dem sich mit dem Font Terminal ein max. Wert von 100 darstellen lässt, kann mit dem Font von Sascha ein max. Wert von 500 dargestellt werden. Saschas Fonts (M2, M3 und M4) stehen hier zum download bereit. |
||||||
|