Manche Aufgaben erledigt man selten, aber dafür nerven sie umso mehr. Bei mir ist das beispielsweise der Fall, wenn ich einen mehrzeiligen Text per VBA zusammenstelle – beispielsweise, um den Text für eine E-Mail vor der Weitergabe an Outlook dynamisch zu erzeugen. Gerade wenn dieser Text mehrzeilig ist und zusätzlich zwischendrin leere Zeilen enthält, braucht man doch einige Anläufe, bis das Ergebnis den Wünschen entspricht. Mit dem hier vorgestellten Add-In geben Sie solche Texte einfach in ein Textfeld ein. Den Code zum Zusammenfügen des Textes erstellt das Add-In automatisch.
Das Add-In im Überblick
Das Add-In ist ein Menü-Add-In und lässt sich dementsprechend über den Menüeintrag Extras|Add-Ins|TextToString beziehungsweise den Ribbon-Eintrag Datenbanktools|Add-Ins|Add-Ins|TextToString starten (mit dem dortigen Eintrag Add-In-Manager installieren Sie das Add-In übrigens). Es erscheint das Fenster aus Bild 1. Dieses erlaubt im Wesentlichen die Eingabe des umzusetzenden Textes in das obere Textfeld – die Abbildung zeigt einen Beispieltext. Das untere Textfeld liefert bereits während der Eingabe einige Zeilen Code, die den Text zeilenweise in eine vom Benutzer festzulegende Variable schreiben. Im oberen Bereich bietet das Add-In noch einige Optionen für folgende Einstellungen an:
Bild 1: Formular des Add-Ins TextToString
- Definieren des Namens der zu verwendenden Variablen
- Festlegen, ob eine Deklarationszeile für diese Variable hinzugefügt werden soll
- Angeben der Anzahl der Zeichen für die Einrückung des Codes
- Festlegen, ob die Zeilenumbruch-Codes (vbCrLf) für leere Zeilen in eine eigene Zeile geschrieben werden oder an die vorherige Zeile angehängt werden
- Speichern von Textbausteinen
- Einfügen gespeicherter Textbausteine
Die Basisfunktion der Anwendung besteht im Überführen der in das Textfeld txtText geschriebenen Texte in Codezeilen. Schauen wir uns folgenden Text als Beispiel an:
Hallo Herr Müller, im Anhang erhalten Sie Ihre Daten. Viele Grüße André Minhorst
Daraus soll folgender Code entstehen:
Dim strText As String strText = strText & "Hallo Herr Müller," & vbCrLf strText = strText & vbCrLf strText = strText & "im Anhang erhalten Sie Ihre Daten." & vbCrLf strText = strText & vbCrLf strText = strText & "Viele Grüße" & vbCrLf strText = strText & "André Minhorst" & vbCrLf
Alternativ sollen die vbCrLf für leere Zeilen direkt an die vorherige Zeile angehängt werden:
Dim strText As String strText = strText & "Hallo Herr Müller," & vbCrLf & vbCrLf strText = strText & "im Anhang erhalten Sie Ihre Daten." & vbCrLf & vbCrLf strText = strText & "Viele Grüße" & vbCrLf strText = strText & "André Minhorst" & vbCrLf
Dies ist, wenn Sie den Code selbst erstellen, erstens eine stumpfsinnige und zweitens fehleranfällige Arbeit. Mit dem Add-In TextToString geben Sie den gewünschten Text einfach in das obere Textfeld ein und kopieren den fertigen Code aus dem unteren Textfeld an die entsprechende Stelle im VBA-Code.
Das Formular frmTextToString sieht im Entwurf wie in Bild 2 aus. Die beiden großen Textfelder heißen txtText und txtString, das Textfeld zur Eingabe des Variablennamens txtVariable, das Kontrollkästchen zur Angabe, ob die verwendete Variable deklariert werden soll, chkVariableDeklarieren. Wichtig ist hier, dass Sie die Eigenschaft Eingabetastenverhalten für das Textfeld txtText auf den Wert Neue Zeile in Feld einstellen. Dadurch kann der Benutzer Zeilenumbrüche mit der Eingabetaste eingeben statt mit der sonst notwendigen Tastenkombination Strg + Eingabetaste.
Bild 2: Add-In-Formular in der Entwurfsansicht
Das Kontrollkästchen chkUmbruchEigeneZeile legt fest, ob die vbCrLf in eine eigene Zeile geschrieben werden soll und das Textfeld txtEinrueckung bestimmt die Anzahl der Zeichen, um welche alle Zeilen eingerückt werden (standardmäßig sind es vier). Fehlt noch die Schaltfläche cmdBausteinSpeichern, mit der Sie die aktuelle Markierung im Textfeld txtText speichern und das Kombinationsfeld cboBausteine, mit der Sie einen gespeicherten Baustein an der beziehungsweise für die aktuell markierte Stelle im Text einfügen.
Texteingabe
Das wichtigste Ereignis für das Add-In ist das Ereignis, das beim ändern des Inhalts des Textfelds txtText ausgelöst wird. Es sieht wie folgt aus und erledigt drei Anweisungen:
Private Sub txtText_Change() strText = Me!txtText.Text strVariable = Nz(Me!txtVariable) StringZusammenstellen End Sub
Die erste Anweisung speichert den aktuellen Text in der Variablen strText zwischen und den im Textfeld txtVariable enthaltenen Variablennamen in der Variablen strVariable. Damit im Gepäck wird die Prozedur StringZusammenstellen aufgerufen, die den Hauptteil der Arbeit erledigt und die wir uns gleich ansehen. Die beiden Variablen strText und strVariable werden modulweit, also im Kopf des Klassenmoduls deklariert:
Dim strText As String Dim strVariable As String
Auch beim ändern der Variablen im Textfeld txtVariable soll der Code im Textfeld txtString gleich angepasst werden.