Leerzeichen entfernen in Access mit VBA

Unerwünschte Leerzeichen zu Beginn oder am Ende einer Zeichenkette im Datenbestand sind oftmals ärgerlich. Je nach Art der Weiterverarbeitung führen sie gerade bei Kombination mehrerer Felder wie Anrede/Vorname/Nachname oder PLZ/Ort zu zusätzlichen Leerzeichen und sehen nicht gut aus.

In Access lassen sich führende oder abschließende Leerzeichen mit der Trim-Funktion entfernen. Wenn sich die hiervon betroffenen Daten in einer Tabelle befinden, wird man zuerst wahrscheinlich daran denken, solche Leerzeichen mittels einer Aktualisierungsabfrage in Verbindung mit der Trim-Funktion zu entfernen.

Wenn nur wenige Spalten betroffen sind, ist eine solche Aktualisierungsabfrage schnell erstellt. Was aber, wenn es sich um eine Tabelle mit sehr vielen Spalten handelt?

Hierfür habe ich den untenstehenden Code entwickelt. Meine Lösung kommt ohne Aktualisierungsabfrage aus, also wenig Schreibaufwand und wenig Arbeit anstelle dem mühevollen Zusammenklicken von Abfragefeldern.

 

    Dim r As Recordset
    Dim vFieldName As String
    Dim i As Long
    
    Set r = CurrentDb.OpenRecordset("SELECT * FROM tbl_daten ORDER BY ID;", DB_OPEN_DYNASET)

    DoCmd.Hourglass True
    
    'Alle Datensätze der Reihe nach durchgehen
    If r.RecordCount > 0 Then 'die Abfrage liefert Daten
        r.MoveFirst
        Do Until r.EOF
            With r
                'Innerhalb jedes Datensatzes alle Spalten durchlaufen
                For i = 0 To (.Fields.Count - 1)
                    vFieldName = .Fields(i).Name
                    If .Fields(i).Type = 10 Then 'Beschränkung auf Felder vom Typ "Kurzer Text"
                        If Not IsNull(.Fields(vFieldName)) Then 'nur wenn das Feld einen Wert liefert
                            .Edit
                                .Fields(vFieldName) = Trim(.Fields(vFieldName))
                            .Update
                        End If
                    End If
                Next
            End With
            r.MoveNext
        Loop
        
        r.Close
        Set r = Nothing
        
        DoCmd.Hourglass False
        MsgBox "Fertig!", 64, "Hinweis"
        
    Else 'die Abfrage liefert keine Daten
        r.Close
        Set r = Nothing
        DoCmd.Hourglass False
        MsgBox "Die Abfrage liefert keine Daten!", vbCritical, "Hinweis"
    End If



Ich nutze hier das DAO-Recordset-Objekt, um alle Datensätze zu durchlaufen. Innerhalb der einzelnen Datensätze geht der Code automatisiert alle Spalten durch. Sofern es sich hierbei um Spalten vom Typ „Text“ handelt, werden führende oder abschließende Leerzeichen mittels Trim-Funktion entfernt und das Recordset aktualisiert, die Änderung also gespeichert.

Mit diesem Code können Sie sogar Tabellen, die aus einer großen Anzahl an Spalten bestehen, ohne großen Aufwand bearbeiten und so eine erhebliche Verbesserung der Datenqualität bewirken.