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 2/2018.

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

Schriftarten im VBA-Editor

Sie programmieren viel unter VBA und scrollen fortwährend in den Modulfenstern? Ihre Augen werden immer schlechter und die Dioptrien der Lesebrille erhöhen sich? Dann wird es möglicherweise Zeit, sich mit der Schriftart zu beschäftigen, die Sie für Ihren Code verwenden. Denn Courier New ist keineswegs das Maß aller Dinge, und es gibt zahlreiche Alternativen, deren Erprobung sich lohnen könnte.

Schriftarten einstellen

In der Regel macht man sich beim Programmieren wenig Gedanken über die Gestalt der Entwicklungsumgebung und nimmt die Vorgaben klaglos hin. Schreiben Sie Texte unter Word, so ist das Einstellen einer passenden Schriftart eine Selbstverständlichkeit. Beim Programmieren unter VBA hingegen wird die vorgegebene Schriftart meist unbesehen übernommen. Und die hört auf den schönen Namen Courier New in der Größe 10 Punkt. Nun existiert VBA schon seit zwei Jahrzehnten, ohne dass sich an dieser Tatsache etwas geändert hätte. Dabei verwenden andere Code-Fenster von Microsoft, wie die des aktuellen Visual Studio, die zweifellos günstigere Schriftart Consolas. Also könnte man einfach unter VBA ebenfalls diese Schriftart verwenden. Doch Gemach! Es gibt inzwischen noch viele weitere freie Schriftarten, die speziell für das Programmieren entwickelt wurden. Deshalb lohnt sich ein Blick auf diese unbedingt, und wir haben sie mithilfe eines Test-Sets, das Sie in der Beispieldatenbank finden, einer Prüfung unterzogen.

Manuell stellen Sie die Schriftart der Code-Fenster unter VBA über das Menü Extras|Optionen...|Editorformat ein. Im dabei erscheinenden Dialog können Sie für verschiedene Schriftstile, die auf der linken Seite aufgelistet sind (siehe Bild 1), die Vorder- und Hintergrundfarbe festlegen, aber auch die Schriftarten samt Schriftgröße. Zum Ausprobieren verschiedener Schriftarten ist das vor allem deshalb unpraktisch, weil das Kombinationsfeld zur Font-Auswahl nur wenige Zeilen ausklappt. Zudem unterscheidet VBA hier nicht zwischen geeigneten und ungeeigneten Schriftarten. Ungeeignet sind die sogenannten Proportionalen Schriften, bei denen jedes Zeichen eine unterschiedliche angepasste Breite einnimmt. Darunter würde die Lesbarkeit erheblich leiden. Der Name einer Schrift wiederum sagt nichts über deren Charakter aus, so dass Sie auf externe Anwendungen angewiesen sind, um überhaupt die proportionalen von den nichtproportionalen Schriften unterscheiden zu können.

Über die Optionen der VBA-Umgebung lassen sich mehrere Schriftarten und Stile einstellen

Bild 1: Über die Optionen der VBA-Umgebung lassen sich mehrere Schriftarten und Stile einstellen

Nun gibt es API-Routinen, über die man die Schriftarten des Systems durchlaufen und zusätzlich nach Eigenschaften filtern kann. Nur gibt es leider keine einfache Methode, um eine Schriftart dann auch per VBA zu setzen. Zumindest haben wir keine gefunden. Die Auswahl einer Schriftart über den Optionen-Dialog wirkt sich nach Bestätigung über OK sofort aus. Programmtechnisch können wir hierfür keinen Ersatz anbieten, sondern nur einen Workaround, der im Folgenden noch beschrieben wird.

Einstellung per VBA selbst

Die Einstellung der Schriftart speichert VBA nämlich in der Registry ab. Zu finden ist der Eintrag im Zweig

HKEY_CURRENT_USER\Software\Microsoft\VBA\7.0\Common.

Dort steht für den Schriftartnamen der Schlüssel FontFace und für die Größe der Schlüssel FontHeight. Da sich der Zweig im User-Bereich befindet, können die Werte auch ohne administrative Rechte programmatisch geändert werden. Die schlechte Nachricht ist, dass VBA die Schlüssel zur Laufzeit ignoriert und es auch nicht so etwas, wie einen Reload gibt, um es zu zwingen, die Schlüssel neu einzulesen. Die einzige Möglichkeit scheint ein kompletter Neustart von Access oder einer anderen Office-Anwendung zu sein. Der allerdings kann sehr wohl von einer Routine ausgelöst werden.

Das Setzen der neuen Werte übernimmt eine ziemlich einfache Prozedur, die Listing 1 abbildet. Sie übergeben ihr als Parameter den Namen der Schriftart, sowie optional ihre Größe, die sonst auf 10 Punkt festgelegt wird. Zum Beschreiben der Registry benutzen wir ein Objekt WshShell, welches sich in der Bibliothek Windows Script Host Model (wshom.ocx) verbirgt, die unter Windows immer installiert ist, falls nicht ein allzu sicherheitsbeflissener Administrator sie deaktiviert hat. Diese Bibliothek nehmen Sie in die Verweise des VBA-Projekts auf. Die Methode ist übrigens unter VBA generell die mit Abstand einfachste, um in die Registry zu schreiben.

Private Sub ChangeVBAFont(ByVal FontName As String, Optional FontSize As Long = 10)
     Dim oReg As WshShell
     Set oReg = New WshShell
     oReg.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\VBA\7.0\Common\FontFace", FontName
     oReg.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\VBA\7.0\Common\FontHeight", FontSize
End Sub

Listing 1: Über diese Prozedur lässt sich eine neue Schriftart für den VBA-Editor einstellen

Einmal gesetzt, müssen Sie anschließend Access zu einem Neustart bewegen. Das erledigen Sie etwa mit den folgenden Zeilen:

Dim sApp As String
  sApp = """" & SysCmd(acSysCmdAccessDir) & "msaccess.exe" & """"
Shell sApp & " " & """" & CurrentDb.Name & """" & " /CMD NoStartDlg"
Application.Quit

SysCmd ermittelt den Pfad der Access-Applikation. Den Namen der ausführenden Datei hängen Sie an. Der Shell-Anweisung übergeben Sie anschließend diesen Pfad und zusätzlich den Dateinamen der aktuellen Datenbank, die sich aus CurrentDb.Name ergibt. Den Sinn der angehängten CMD-Anweisung werden wir gleich erläutern. Die Pfade sollten Sie immer in Anführungszeichen einbinden, damit Shell sie etwa bei Leerzeichen im Pfad nicht fehlinterpretiert. Sie starten damit also eine neue Instanz der Datenbank und beenden die aktuelle über Quit. Das Ganze erfolgt in der Regel so schnell, dass es kaum wahrnehmbar ist. Allerdings sollten Sie dann in der neuen Instanz auch den gleichen Zustand wiederherstellen, der vor dem Beenden der aktuellen zu sehen war. In der Demo-Anwendung geschieht das über einen Code des Startformulars frmIntro. Dort finden sich im Ereignis Beim Laden die folgenden Zeilen:

If Command = "NoStartDlg" Then
     DoCmd.Close acForm, Me.Name
     DoCmd.OpenForm "frmFonts"
     DoCmd.OpenModule "mdlFonts", "GetFontsAsCollection"
End If

Ausgewertet wird hier zunächst die Command-Funktion von VBA. Sie gibt einen String aus, der über den Kommandozeilenparameter CMD gesetzt werden kann. Normalerweise ist das ein Leer-String. Wir aber haben diesen zuvor in der Prozedur mit dem Wert NoStartDlg versehen. Also werden die weiteren Zeilen ausgeführt, das Intro-Formular geschlossen und stattdessen das Formular frmFonts geladen und zusätzlich das Modul mdlFonts geöffnet, in dem außerdem die Prozedur GetFontsAsCollection angesprungen wird. Dies ist bereits ein Vorgriff auf die Funktionalität des Formulars frmFonts.

Einstellen der VBA-Schriftart über ein Formular

Das Formular frmFonts öffnet sich in der Demo automatisch, nachdem Sie das Intro-Formular schließen. Oder eben, nachdem die vorher beschriebene Prozedur aufgerufen wurde. Dann präsentiert es sich wie in Bild 2.

Das Formular frmFonts zeigt einen Pseudo-Editor mit einstellbarer Schriftart mit Beispielcode an

Bild 2: Das Formular frmFonts zeigt einen Pseudo-Editor mit einstellbarer Schriftart mit Beispielcode an

Den größten Teil nimmt die Textbox ein, in der ein Beispiel-Code abgebildet wird. Es handelt sich dabei übrigens nicht um eine normale Access-Textbox, sondern um ein ActiveX-Steuerelement, die MSForms-Variante, welche mehr Steuerungsmöglichkeiten zulässt. Die Schriftart können Sie über das Kombinationsfeld oben ebenso ändern, wie die Schriftgröße. Statt des Beispiel-Codes können Sie über die Optionsgruppe auch alle Zeichen des Zeichensatzes als Block in die Textbox holen (siehe Bild 3).

Alternativ kann im Editorfenster auch der komplette Zeichensatz der Schrift angezeigt werden

Bild 3: Alternativ kann im Editorfenster auch der komplette Zeichensatz der Schrift angezeigt werden

Sagt Ihnen der Font zu, so legen Sie ihn in der Registry über Klick auf den Button Setzen! fest. Access wird dann, wie beschrieben, neu gestartet und das Formular erneut zur Ansicht gebracht. Gleichzeitig wird der VBA-Editor aktiviert und ebenfalls angezeigt, so dass Kontrolle über die neu gesetzte Schriftart besteht. Es hängt von Ihrem System ab, wie das abläuft: Entweder Sie haben zwei Monitore, wobei Access auf dem einen, die VBA-Umgebung auf dem anderen dargestellt wird. Oder Sie haben einen ziemlich großen Monitor, auf dem Sie beides nebeneinander platzieren. Ansonsten überdeckt nun VBA das Access-Fenster. Dargestellt wird aber immer das Modul mdlFonts, in dem die Prozedur GetFontsAsCollection ins Zentrum gebracht ist. Das also ist der Workaround, der leider nötig wird, weil wir keine andere Methode fanden, um das Verhalten des Optionen-Dialogs nachzustellen.

Wie ist das Formular nun aufgebaut? Beteiligt an ihm sind drei weitere Elemente, das Modul mdlFonts und die Tabellen tblFonts, tblFontsDimensions. Die Routinen des Moduls ermitteln über API-Funktionen die Schriftarten des Systems und filtern diese nach ihrem Stil, damit nur die für unsere Zwecke benötigten nicht-proportionalen Schriften (Monospace) übrigbleiben.

Diese werden dann in der Tabelle tblFonts abgelegt. Im zweiten Schritt errechnen weitere Prozeduren die Ausdehnung der jeweiligen Schrift und speichern Breite (LineWidth), wie Höhe (LineHeight), einer vorgegebenen Code-Zeile in der Tabelle tblFontDimensions ab.

Zusätzlich wird aus diesen beiden Parametern die von der Zeile eingenommene Fläche (Area) berechnet, damit die Tabelle später direkt nach dem Raumbedarf der Schrift sortiert werden kann. Die dafür herangezogene willkürliche Beispiel-Code-Zeile lautet:

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.

Bitte teilen Sie uns Ihre Anrede, Ihren Namen und Ihre E-Mail-Adresse mit:

Anrede:
Vorname:
Nachname:
E-Mail:

© 2003-2018 André Minhorst Alle Rechte vorbehalten.