Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
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.
Die beim ändern ausgelöste Prozedur sieht prinzipiell genauso aus wie die zuvor beschriebene, nur dass nun der aktuelle Inhalt von txtVariable mit der Text-Eigenschaft ausgelesen wird:
Private Sub txtVariable_Change() strText = Nz(Me!txtText) strVariable = Me!txtVariable.Text StringZusammenstellen End Sub
Die drei übrigen Steuerelemente chkUmbruchEigeneZeile, chkVariableDeklarieren und txtEinrueckung lösen einfach nur die Prozedur StringZusammenstellen aus:
Private Sub chkUmbruchEigeneZeile_AfterUpdate() StringZusammenstellen End Sub Private Sub chkVariableDeklarieren_Click() StringZusammenstellen End Sub Private Sub txtEinrueckung_AfterUpdate() StringZusammenstellen End Sub
VBA-Code zusammenstellen
Die Prozedur aus Listing 1 erstellt schließlich den resultierenden VBA-Code. Im ersten Schritt wertet sie den im Textfeld txtEinrueckung angegebenen Zahlenwert aus und erzeugt eine Zeichenkette, die aus der angegebenen Menge Leerzeichen besteht.
Listing 1: Zusammenstellen des VBA-Codes auf Basis des eingegebenen Textes
Private Sub StringZusammenstellen() Dim strString As String Dim strTexte() As String Dim strEinrueckung As String Dim strDeklaration As String Dim i As Integer strEinrueckung = Space(Me!txtEinrueckung) strTexte = Split(strText, Chr(13) & Chr(10)) For i = LBound(strTexte) To UBound(strTexte) If Not Len(strTexte(i)) = 0 Then strString = strString & strEinrueckung & strVariable & " = " & strVariable & " & """ _ & strTexte(i) & """ & vbCrLf " & vbCrLf Else If Me!chkUmbruchEigeneZeile Then strString = strString & strEinrueckung & strVariable & " = " & strVariable & " _ & vbCrLf " & vbCrLf Else If Right(strString, 2) = vbCrLf Then strString = Left(strString, Len(strString) - 2) & "& vbCrLf" & vbCrLf End If End If End If Next i If Me!chkVariableDeklarieren Then strDeklaration = strEinrueckung & "Dim " & strVariable & " As String" & vbCrLf strString = strDeklaration & strString End If Me!txtString = strString End Sub
Danach wird der komplette Text in die einzelnen Zeilen aufgeteilt, die alle in einem eigenen Element eines String-Arrays landen. Die Aufteilung übernimmt die Split-Funktion, die den Text überall dort unterteilt, wo sich ein Zeilenumbruch befindet.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo