Vom Text zum String per Access-Add-In

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.

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

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:

pic002.png

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.

pic001.png

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

Schreibe einen Kommentar