Daten aus unstrukturierten Texten übernehmen

Auch wenn Sie noch so gut mit VBA umgehen und reguläre Ausdrücke aus dem Effeff beherrschen: Wenn Sie Daten aus einem unstrukturierten Text in die Felder einer Tabelle übernehmen möchten, kommen Sie um ein wenig Handarbeit nicht herum. Vielleicht lassen sich aber mit einer kleinen Lösung noch ein paar Kopieren-und-Einfügen-Aktionen sparen Schauen wir uns das einmal am Beispiel einer E-Mail mit einer Kontaktanfrage an.

Beispielhaft

Für die in diesem Beitrag vorgestellte Technik gibt es verschiedene Anlässe. Diesen ist gemein, dass ein Formular ein Textfeld mit einem Text enthält, aus dem eine oder mehrere Informationen in gebundenen Feldern landen sollen. Bild 1 zeigt, wie das aussehen soll: Dort finden Sie auf der linken Seite einen unstrukturierten Text (in diesem Fall eine Adresse) und auf der rechten Seite eine Reihe Textfelder, welche die Bestandteile des Texts links aufnehmen sollen. Hier funktioniert das ganz einfach: Sie setzen den Fokus auf das Zielfeld rechts und markieren dann den Text links, der in diesem Textfeld landen soll, mit der Maus. Beim Loslassen der Maustaste wird der Text in das Textfeld kopiert.

pic001.png

Bild 1: Einfachstes Kopieren markierter Texte in ausgewählte Textfelder

Wie funktioniert das Eigentlich ganz einfach: Wir benötigen zunächst eine Variable des Datentyps Control, die sich das zuletzt auf der rechten Seite angeklickte und somit aktive Zielsteuerelement merken soll:

Dim ctlZiel As Control

Die Textfelder auf der rechten Seite versehen Sie dann jeweils mit einer Ereignisprozedur, die durch das Ereignis Bei Fokuserhalt ausgelöst wird und wie folgt aussieht:

Private Sub txtZielfeld1_GotFocus()
    Set ctlZiel = txtZielfeld1
End Sub

Die einzige Anweisung dieser Prozedur füllt die Variable ctlZiel mit einem Verweis auf das soeben aktivierte Steuerelement. Eine solche Prozedur legen Sie für jedes betroffene Textfeld an. Dies ist Voraussetzung für die Prozedur, die durch das Ereignis Maustaste auf des Textfelds links ausgelöst wird. Diese prüft schlicht, ob im Textfeld links ein Text markiert ist, und schreibt diesen dann in das zuletzt auf der rechten Seite markierte Textfeld. Anschließend setzt es noch den Fokus auf dieses Textfeld:

Private Sub txtUnstrukturiert_MouseUp(Button As Integer, Shift As Integer, _
        X As Single, Y As Single)
    If Me!txtUnstrukturiert.SelLength > 0 Then
        ctlZiel = Me!txtUnstrukturiert.SelText
        ctlZiel.SetFocus
    End If
End Sub

Das Setzen des Fokus ist wichtig für das schnelle Einfügen der Elemente aus dem linken Textfeld in die Zieltextfelder. Der geplante Ablauf sieht vor, dass Sie zunächst das obere Zielfeld markieren dann links mit der Maus den Text auswählen, der in diesem Textfeld landen soll.

Dadurch, dass das Zieltextfeld danach den Fokus erhält, können Sie mit der Tabulator-Taste gleich zum nächsten Textfeld springen. Der Mauszeiger kann dann gleich auf dem unstrukturierten Text links verharren und braucht nicht zwischen den Textfeldern hin- und herbewegt zu werden.

Um etwa Name, Straße, Ort und Land von links in die vier Felder rechts zu kopieren, brauchen Sie genau vier Markierungsgesten mit der Maus und drei Betätigungen der Tabulator-Taste – einfacher geht es nicht, wenn der Text kein vollautomatisches Auslesen erlaubt.

Technik schnell integriert

Wie so oft in der letzten Zeit haben wir wieder eine beziehungsweise mehrere Klassen programmiert, welche die für ein einzelnes Formular entwickelte Technik flexibel einsetzbar machen.

Wenn Sie die Lösung gleich einsetzen möchten, führen Sie die folgenden Schritte durch:

  • Importieren Sie die beiden Klassen clsCopyText und clsCopyTextControl in die Zieldatenbank.
  • Wählen Sie das Zielformular aus. Dieses muss sowohl das Quelltextfeld enthalten als auch die Zieltextfelder.
  • Fügen Sie der Ereigniseigenschaft Beim Laden des Formulars den Wert [Ereignisprozedur] hinzu und klicken Sie auf die Schaltfläche rechts neben der Eigenschaft.
  • Es erscheint der Prozedurrumpf der Prozedur Form_Load. Unabhängig davon, ob diese in Ihrem Formular bereits enthalten ist und gegebenenfalls bereits Code enthält, fügen Sie die folgenden Zeilen hinzu:
Set objCopyText = New clsCopyText
With objCopyText
    Set .SourceTextBox = Me!txtUnstrukturiert
End With

Statt Me!txtUnstrukturiert geben Sie einfach den Namen des Quelltextfelds auf Ihrem Formular an. Fertig! Beim nächsten Anzeigen des Formulars in der Formularansicht sorgt die Lösung gleich dafür, dass das erste Zieltextfeld grau hinterlegt wird.

Außerdem fügt sie allen beteiligten Textfeldern die bereits oben beschriebene Funktion hinzu. Sprich: Das aktuell selektierte Textfeld dient als Ziel, wenn der Benutzer einen Text im als SourceTextBox angegebenen Textfeld markiert.

Funktion der Klassen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar