Zeilenumbrüche ersetzen
Hallo an alle,
ich habe das folgende Problem: Nachdem ich einige Tabellen von Excel in Access importiert habe, werden die Zeileunbrüche nicht mehr richtig dargestellt. Dies ist sicher einigen bekannt.
Ich habe jetzt versucht, mir eine Routine zu schreiben, welche die Ersetzung der betreffenden Zeichenfolgen automatisch vornimmt. Daran bin ich jedoch gescheitert. Ich habe es über zwei "For Each..."-Schleifen versucht. Leider weiß ich nicht, wie man die Zeilen anspricht.
Wenn mir jemand mit meiner Variante helfen kann oder eine andere funktioniertende Variante anzubieten hat, würde ich mich freuen, sie zu hören.
Danke im Voraus
MfG
renewa
Antwort schreiben
Antwort 1 von lleopard vom 04.09.2019, 12:24 Options
Hallöle,
hier der Code:
Function FeldinhalteErsetzen(r As Recordset, Feld As String, ALt As String, Neu As String)
If r.RecordCount = 0 Then Exit Function
r.MoveFirst
Do While Not r.EOF
r.Edit
DoCmd.Hourglass False
r(Feld) = TextErsetzen(r(Feld), ALt, Neu)
r.Update
r.MoveNext
Loop
End Function
Function TextErsetzen(ByVal Text As Variant, Suchen As String, _
Ersetzen As String) As Variant
Dim Position As Integer
Dim Länge As Integer
If IsNull(Text) Then Exit Function
Länge = Len(Suchen)
Position = 0
Do
Position = InStr(Position + 1, Text, Suchen)
If Position = 0 Then Exit Do
Text = Left(Text, Position - 1) + Ersetzen _
+ Mid(Text, Position + Länge)
Loop
TextErsetzen = Text
End Function
Und diese in einem neuen Modul einfach abspeichern und zB mit:
Sub ErsetzenSonderzeichen()
Dim AktuelleDB As Database
Dim r As Recordset
Set AktuelleDB = CurrentDb
Set r = AktuelleDB.OpenRecordset("[meineTabelle]", dbOpenTable)
FeldinhalteErsetzen r, "[MeinFeldname]", vbcrlf, " "
end sub
Das ersetzt Absatzmarken durch Leerzeichen. Kannst natürlich einfach anpassen.
Gruß Leo
Antwort 2 von renewa vom 04.09.2019, 14:39 Options
Hallo lleopard,
wow und vielen Dank für deine Hilfe. Leider funktioniert es nicht ganz. Ich bekomme einen Überlauf an der Stelle
Text = Left(Text, Position - 1) + Ersetzen + Mid(Text, Position + Länge)
Ich habe nur den Aufruf der Funktion FeldinhalteErsetzen geändert, damit die Vierecke, die das Importieren anstelle eines Zeilenumbruchs erzeugt, durch
FeldinhalteErsetzen r, Spalte6, vbLf, vbCrLf
ersetzt.
Kannst du mir nochmal helfen und mir sagen, wie ich den Überlauf umgehen kann? Oder ist der Datensatz zu groß?
Antwort 3 von lleopard vom 05.09.2019, 10:08 Options
Hallo renewa,
das Problem ist, daß du natürlich in dem DS vbLf durch vbCrLf ersetzt und somit wieder ein vbLf in der zeile gefunden wird.
ich denke du solltet das lösen indem du 2 Durchläufe machst, wenn du diesen Eretzungsvorgang so umsetzen willst.
1. Ersetze vbCrLf durch zb "xxx", dann sind alle Zeilenumbrüche weg.
2. Ersetze nun wieder "xxx" durch vbLf.
Dann sollte das Überlauf-Problem behoben sein.
Gruß Leo
Antwort 4 von renewa vom 05.09.2019, 11:04 Options
Hallo,
ja du hattest vollkommen Recht. Es funktioniert jetzt einwandfrei. Einmal mehr bin ich dir zum Dank verpflichtet. Wo wohnst du und wie kann ich dir ein Bier spendieren? :)
Dankeschön!
MfG
renewa
Antwort 5 von lleopard vom 06.09.2019, 08:48 Options
Hi renewa,
büdde. Wer hier schreibt, hilft doch gerne. N Bierchen, da sage ich aber auch nicht nein. wenn du mal in die Gegend von Braunschweig kommst, sag bescheid ;-)
cu leo