Bitsqueezer
Office-VBA-Programmierer
Verfasst am: 09. Dez 2009, 16:18 Rufname:
|
| |
| Version: Office 2007 |
|
Hallo zusammen,
Conditional Formatting ist eine feine Sache in Endlosformularen: Man kann jedem Feld Eigenschaften innerhalb einer Zeile in Abhängigkeit von einfachen Feldwerten oder komplexen Ausdrücken zuweisen. Sogar eine Formatierung zuweisen, wenn ein Feld den Fokus erhält.
Aber wo Licht ist, ist auch Schatten: Die bedingte Formatierung kostet richtig Performance, wenn man in größeren Listen scrollt oder auf große Listen Filter oder Sortierungen anwendet.
Außerdem kann man neben der Default-Formatierung lediglich drei weitere bedingte Formatierungen einstellen, was auch nicht gerade üppig ist.
Beide Probleme kann man mit der angehängten VBA-Library (in Grenzen) lösen.
Enthalten sind Funktionen, die die bedingte Formatierung eines Feldes (Textbox oder Combobox) auslesen, löschen oder schreiben können. Zusätzlich kann man die Einstellungen in einer Datenbanktabelle speichern (im Modul geschrieben für einen SQL Server und ein Access Projekt, läßt sich aber ganz leicht an Access Tabellen anpassen).
Der CREATE-Befehl für SQL Server ist im Header enthalten.
Die übrigen Funktionen können auch ohne weitere Tabellen verwendet werden. Man kann nun einen Button im Formular anbieten, der einfach alle Controls eines Formulars durchläuft, deren Einstellungen für bedingte Formatierung als Variablen oder in eine Tabelle speichert und diese dann im Control löscht.
Ergebnis ist eine "saubere" Tabelle, die keinerlei Farbspielereien mehr enthält, dafür aber auch wieder im Volltempo gescrollt werden kann.
Dies kann man zum Beispiel so erreichen:
| Code: | For Each ctl In Me.Controls
If (TypeOf ctl Is TextBox) Or (TypeOf ctl Is ComboBox) Then
procCONDFSaveCtl fnCONDFGetCtl(ctl), ctl.Name
procCONDFDeleteAll ctl
End If
Next ctl | Dabei werden nur die bedingten Formatierungen gelöscht, wenn das Feld selbst irgendwie gefärbt ist, bleibt das unverändert, das stört aber das Scrolltempo nicht.
Darüber hinaus kann man die Funktionen dafür verwenden, um z.B. in Abhängigkeit der ausgewählten Zeile die bedingten Formatierungen neu zu setzen, was in gewissen Grenzen die Anzahl der möglichen Formatierungen erhöhen kann. Da die Änderungen alle Zeilen betreffen, ändern sich natürlich auch die Formatierungen für den Rest des Formulars. In einem Einzelformular dagegen kann man so die möglichen Formatierungen programmiertechnisch beinahe beliebig erweitern - dort hat man i.d.R. auch nicht die Performance-Probleme.
Das Attachment kann einfach im VBA-Editor mit "Importieren" als Modul eingefügt werden.
Viel Spaß damit...
Christian
| Beschreibung: |
VBA-Library für Conditional Formatting (Bedingte Formatierung)
Kleiner Bugfix... |
|
 Download |
| Dateiname: |
modConditionalFormattingV1.zip |
| Dateigröße: |
3.52 KB |
| Heruntergeladen: |
35 mal |
|
|