Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2009.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie Techniken kennen, mit denen Sie dem Benutzer das Festlegen von Zahlenformaten überlassen.

Techniken

Formulare, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

BenutzerdefinierteFormate.mdb

Shortlink

691

Benutzerdefinierte Formatierung

André Minhorst, Duisburg

Für Datum, Uhrzeit, Währung et cetera ist dies ein alter Hut: Der Benutzer kann das gewünschte Anzeigeformat in der Systemsteuerung systemweit festlegen. Für andere, anwendungsspezifische Zahlenwerte legt üblicherweise der Entwickler die Formatierung fest. Der Kunde oder Benutzer kann höchstens Vorgaben machen. Wie wäre es aber, wenn Sie den Benutzer Ihrer Anwendung selbst Formate festlegen lassen? Wir zeigen, wie das funktioniert.

Wenn Sie dem Benutzer Ihrer Anwendung die Möglichkeit bieten wollen, dass dieser Zahlenformatierungen ähnlich wie in der Systemsteuerung von Windows festlegen kann (s. Abb. 1), brauchen Sie prinzipiell folgende Elemente:

pic001.png

Abb. 1: Ändern der Zahlenformate in der Systemsteuerung von Windows XP

  • eine oder mehrere Tabellen, welche die Formatangaben speichern,
  • ein Formular, mit dem der Benutzer die Änderungen vornimmt,
  • und Techniken, mit denen Sie den betroffenen Zahlenwerten die Formate zuweisen - diese treten überall auf, wo die Zahlen angezeigt werden, also beispielsweise in Abfragen, Formularen und Berichten.

Datenmodell

Bevor wir die Tabellen erstellen, formulieren wir die Wünsche an unsere Formatierungs-Lösung. Am besten verwenden wir für die Formatausdrücke die gleichen Regeln, die auch die Format-Funktion von VBA einsetzt - dazu später mehr.

Damit ein nachträgliches Ergänzen der Formatvorgaben später durch einfaches Anlegen weiterer Datensätze erfolgen kann, können wir bereits drei Felder für unsere Tabelle vormerken:

  • FormatID: Primärschlüsselfeld
  • Formatbezeichnung: Bezeichnung des Formats
  • Formatdefinition: Formatierungsausdruck, kompatibel zur Format-Funktion von VBA

Um den praktischen Nutzen zu erweitern, soll der Benutzer außerdem einen Beispielausdruck eingeben können, der im Formular zur Definition der Formatausdrücke zu Testzwecken eingesetzt wird.

Die Tabelle sieht im Entwurf nun wie in Abb. 2 aus und heißt tblFormate.

pic002.png

Abb. 2: Die Tabelle zum Speichern der Formatangaben in der Entwurfsansicht

Formular zum Definieren der Eingabeformate

Das Formular besitzt die Abfrage qryFormate als Datenherkunft. Diese Abfrage erledigt etwa mehr als nur die Sortierung der Formate nach der Formatbezeichnung: Sie steuert auch noch ein Feld bei, das den Beispielausdruck mit dem im Feld Formatdefinition angegebenen Ausdruck formatiert (s. Abb. 3).

pic004.png

Abb. 3: Diese Abfrage sortiert die Formatierungsangaben nach dem Alphabet und fügt eine formatierte Fassung des Beispielausdrucks hinzu.

Das Formular sieht schließlich wie in Abb. 4 aus. Es zeigt die Daten in der Endlosansicht an, weshalb Sie die Eigenschaft Standardansicht auf Endlosformular einstellen.

pic003.png

Abb. 4: Das Formular zur Anzeige der Formatangaben in der Entwurfsansicht

Wenn Sie nun in die Formularansicht wechseln und eine Formatbezeichnung, eine Formatdefinition sowie einen Beispielausdruck eingeben, passiert natürlich noch nichts Weltbewegendes.

Es gibt an dieser Stelle ja auch nur eine Anforderung: Das Feld Beispielausdruck soll in dem Format angezeigt werden, das im Feld Formatdefinition angegeben wurde. Perfekt wäre es natürlich, wenn der Benutzer gleich beim Eingeben des Formatausdrucks ein Ergebnis sähe.

Dazu brauchen wir ein paar Zeilen VBA-Code, der durch das Ereignis Bei Änderung des Felds mit der Formatdefinition ausgelöst wird. Vorher jedoch stellen wir die Namen der Textsteuerelemente um, indem wir jedem das Präfix txt voranstellen (also txtFormatID, txtFormatbezeichnung und so weiter).

Die Ereignisprozedur sieht wie folgt aus:

Private Sub txtFormatdefinition_Change()

    Me!txtBeispielausdruck.Format =

    Nz(Me!txtFormatdefinition.Text)

    End Sub

Wenn Sie nun einen Ausdruck in das Textfeld txtBeispielausdruck eingegeben haben und den Wert im Textfeld txtFormatdefinition ändern, wird der Inhalt von txtFormatierterBeispielausdruck entsprechend formatiert.

Sie werden allerdings feststellen, dass sich die Einfügemarke bei jeder Änderung an das Ende des in txtFormatdefinition enthaltenen Texts bewegt, was auf Dauer stört.

Erweitern wir die Prozedur also so, dass die Einfügemarke nach dem Ändern des Formats wieder dort landet, wo sie sich vorher befunden hat:

Private Sub txtFormatdefinition_Change()

    Dim intSelStart As Integer

    intSelStart = Me!txtFormatdefinition.SelStart

    Me!txtFormatierterBeispielausdruck.Format =

    Nz(Me!txtFormatdefinition.Text)

    Me!txtFormatdefinition.SelStart = intSelStart

    End Sub

Die neu hinzugefügten Zeilen lesen vor dem Ändern des Formats mit der Eigenschaft SelStart des Steuerelements die Position der Einfügemarke aus und schreiben diese anschließend wieder zurück.

Wenn Sie das Steuerelement txtBeispieleingabe mit dem gleichen Komfort ausstatten möchten, verwenden Sie eine ähnliche Ereignisprozedur, die durch die entsprechende Ereigniseigenschaft von txtBeispieleingabe ausgelöst wird und wie folgt aussieht:

Private Sub txtBeispielausdruck_Change()

    Dim intSelStart As Integer

    intSelstart = Me!txtBeispielausdruck.SelStart

    DoCmd.RunCommand acCmdSaveRecord

    Me.txtBeispielausdruck.SetFocus

    Me!txtBeispielausdruck.SelStart = intSelstart

    End Sub

Der kleine, notwendige Unterschied ist der, dass wir dem Textfeld txtFormatierterBeispielausdruck nicht einfach den Wert von txtBeispielausdruck zuweisen können.

Das Textfeld ist bereits an das Feld FormatierterBeispielausdruck der Datenherkunft gebunden und kann daher nicht durch eine Wertzuweisung geändert werden.

Dies erledigen wir indirekt, indem wir den aktuellen Datensatz nach der Eingabe jedes einzelnen Buchstabens in txtBeispielausdruck speichern und so für eine Aktualisierung von txtFormatierterBeispielausdruck sorgen. Auch hier ist das vorherige Merken und anschließende Wiederherstellen der Cursor-Position nötig. In der Formularansicht sieht frmFormate nun wie in Abb. 5 aus.

pic005.png

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Berichte manuell füllen

Tilgen mit Access und Excel

Gruppensummen ohne Gruppen im Berichtsfuß

Zugriff auf Formulare

Formulare im Blickpunkt

Modale Dialoge mal anders

Unterformulare: Daten anlegen und löschen

Softwareprojekte verwalten

Termine in Berichten darstellen

Formularposition speichern und wiederherstellen

Listenfeld und Details in einem Formular

Tipps und Tricks

Access-FAQ: Rund um Access

Erstellen von Abfragen als Datenherkunft oder Datensatzherkunft

Ereignisprozeduren implantieren

TreeView-Elemente im Griff

Quellcode-Versionsverwaltung inside

© 2003-2015 André Minhorst Alle Rechte vorbehalten.