Button Home/Top/Zurück


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.

Access Icon Download einer Beispiel-Datenbank (31 KB)
Font Icon Download der Fonts M2, M3 und M4

Button Home/Top/Zurück