Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Leerzeichen rechts abschneiden

Begonnen von Torsten., April 19, 2023, 17:22:22

⏪ vorheriges - nächstes ⏩

Beaker s.a.

Muss mich nochmal reinhängen. Das geht doch auch viel kürzer, -
abgesehen von den eingebauten Funktionen Left und Right
Function LeerzRechtsWeg(strText As String) As String
        Do While Right$(strText, 1) = " "
            strText = Left$(strText, Len(strText) - 1)
        Loop
    LeerzRechtsWeg = strText
End Function
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
For I = Len(strText) To 1 Step -1 'von hinten anfangenBrauchst Du für diese Zeile wirklich eine Erklärung ?
Ich halte das für selbsterklärend, zumal da noch der Kommentar "'von hinten anfangen" anfangen dabei steht.
Versuche es einfach mal mit nachdenken.  :)

If Right$(strText, 1) = ")" ThenWie kommst Du hier auf eine schließende Klammer ? Du willst doch Leerzeichen tauschen.



@ekkehard
Es geht ihm ja nicht um kürzer oder so, er will ja den Originalcode verstehen.
Gruß Klaus

Torsten.

@klaus
@Beaker
@MzKlMu
If Right$(strText, 1) = ")" ThenDa habe ich durch probieren und testen es vergessen für die Antwort auf Leerzeichen zurückzustellen.

@MzKlMu
ZitatIch halte das für selbsterklärend, zumal da noch der Kommentar "'von hinten anfangen" anfangen dabei steht.
Versuche es einfach mal mit nachdenken.
Wenn Du wüßtes wie mir der Kopf raucht für die für Euch einfachsten Sachen.
For I = Len(strText) To 1 Step -1 'von hinten anfangenWenn ich die Zeile interpretieren soll muß ich sie verstehen:
Das versuche ich indem ich in Google für
For I = Len(strText)oder
To 1 Step -1die Zeilen eingebe um zu verstehen was da gemeint ist. Nur da finde ich nichts was ich verstehen und zuordnen kann. Da helfen auch keine Hinweise wie z.B.
ZitatAls Anfangslekture für VBA gibt es da z.B.
, also kann ich nur Euch fragen und um Erklärungen bitten...

Gruß Torsten


Beaker s.a.

Na gut,
For I = Len(strText) 'For startet eine Schleife, in der I bei jedem Durchlauf die Länge des Strings
strText festhält.
Die Schleife läuft theoretisch solange bis der String nur noch ein Zeichen enthält,
weil der String ja durch das Abschneiden immer kürzer wird. Dazu kommt es aber nur,
wenn der übergebene String nur aus Leerzeichen besteht. Ansonsten wird die Schleife
verlassen sobald ein Zeichen <> Leerzeichen auftaucht.
ZitatTo 1 Step -1
Also wenn der String 10 Zeichen lang ist und am Ende zwei Leerzeichen stehen läuft
die Schleife bis I = 8.
ZitatDa helfen auch keine Hinweise wie z.B.
Vielleicht hilft ja der Hinweis auf die Taste F1.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Torsten.

Hallo Beaker,
vielen Dank für die sehr verständliche Erklärung, die ich nachvollziehen kann.
Ebenfalls ist der Hinweis mit der F1-Taste sehr hilfreich - die Hilfe hatte ich nie benutzt da sie mir nicht bekannt war.

Ich werde mir Deinen letzten Code speichern und nutzen.

Jetzt werde ich mich dem Problem widmen warum dieses rechte Leerzeichen überhaupt vorhanden ist.
Es entsteht durch den Import einer vom Hersteller zur Verfügung gestellten Excell-Tabelle.

Dazu melde ich mich die nächsten Tage.

Vielen Dank an alle für die Hilfe.

Gruß Torsten

Beaker s.a.

ZitatIch werde mir Deinen letzten Code speichern und nutzen.
Wozu?
Warum verwendest du nicht die implementierten Funktionen Left und Right?
Wurde dir doch mehrfach ans Herz gelegt.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Torsten.

Hallo zusammen,
ich möchte das Thema nochmal öffnen, da in dem Zusammenhang ein weiteres Problem besteht:
Anbei eine Excell-Datei in der zu ersehen ist das am Ende kein Leerzeichen sondern ein Leerfeld ist - evtl. ein Zeilenumbruch?
In der angehängten DB in der Tabelle _Hinweis sind weitere Informationen hinterlegt.

Ich bitte Euch um weitere Hilfe.

Gruß Torsten

Beaker s.a.

Hallo Torsten,

Das sind keine Leerzeichen im Feld "Funktionsprinzip". Das ist ein TAB, wird
jedenfalls in meiner Textverarbeitung als solches angezeigt.
Löschen geht mit
Function LeerzeichenWeg(strText As String) As String
    LeerzeichenWeg = Mid(strText, 1, Len(strText) - 2)
End Function
Besser wäre es allerdings, wenn man den Ersteller der Excel-Datei dazu überreden
könnte eine "saubere" zur Verfügung zu stellen.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Torsten.

Hallo Ekkehard,
der Code bewirkt das in jedem Datensatz das letzte rechte Zeichen entfernt wird, dass ist aber nicht gewünscht.
Hast Du eine weitere Möglichkeit?

Gruß Torsten

Beaker s.a.

Function LeerzeichenWeg(strText As String) As String
    If Right(strText, 2) = "  " Then
        LeerzeichenWeg = Left(strText, Len(strText) - 2)
    Else
        LeerzeichenWeg = strText
    End If
End Function
Frag mich nicht, warum ich beim letzten Mid verwendet habe; und sorry wegen
des vergessenen Else-Zweigs.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Torsten.

Moin Ekkehard,
funktioniert leider nicht.
Hattest Du den Code in der angehängten testzip (#21) geprüft und funktionierte es bei Dir?

Du hast 2 Leerzeichen drin...
If Right(strText, 2) = "  " Then
Ich habe es mit einem Tab-Zeichen probiert
If Right(strText, 2) = " " Thendas brachte auch kein Erfolg.

Gruß Torsten

MzKlMu

Hallo,
wo ist denn da ein Tab Zeichen?

Du musst den ASCII Code der letzten Zeichen ermitteln und dann gezielt löschen.
Gruß Klaus

Torsten.

Hallo Klaus,
hat Ekkehard festgestellt #22
ZitatDas sind keine Leerzeichen im Feld "Funktionsprinzip". Das ist ein TAB, wird
jedenfalls in meiner Textverarbeitung als solches angezeigt.

Wie kann man einen Ascii Code ermitteln wenn man kein Zeichen hat? In der Ascii-Tabelle hat jeder Code ein Zeichen - außer 032 (was ich als Leerzeichen werten würde).
Hast Du einen Vorschlag?

Gruß Torsten

MzKlMu

#28
Hallo,
was hat Ekkehard festgestellt ?
ZitatIch habe es mit einem Tab-Zeichen probiert
If Right(strText, 2) = "    " ThenWas hat diese Zeile mit einem Tab Zeichen zu tun ?

Kommentiere mal in der Funktion alle Zeilen aus.
Lege dann folgendes neu an:
MsgBox Asc(Right(strText, 1)) 'nur diese eine Zeile.
Was wird gemeldet?

PS:
Du solltest Dir unbedingt die Grundlagen zu VBA aneignen.

https://www.vba-tutorial.de/
Gruß Klaus

Beaker s.a.

Hallo,

Das TAB-Zeichen ist eine "Erfindung" von mir. Ich hatte die Excel-Datei in eine
.csv exportiert, und diese in Libre-Office-Writer kopiert. Dort wurde das letzte
Zeichen eben als TAB angezeigt.
Die .csv habe ich dann in der accdb verknüpft und per INSERT in die vorhandene
Tabelle eingefügt. Wobei i.Ü. das Leerzeichen im Feld "Ursprungsland" automatisch
verschwindet. Die Prozedur habe ich dann getestet, indem ich einen Feldinhalt
kopiert und im Direktfenster die Prozedur damit aufgerufen habe; - das funzt.
Die Abfrage habe ich gar nicht getestet (schäm). Da funzt es dann leider nicht,
wie gerade festgestellt habe; - sehr komisch. Habe aber herausgefunden wie es
geht (nach Klaus' Hinweis in #26), der Rest hat sich dann überschnitten.
Function LeerzeichenWeg(strText As String) As String
    If Asc(Right(strText, 1)) = 9 Then
        LeerzeichenWeg = Left(strText, Len(strText) - 1)
    Else
        LeerzeichenWeg = strText
    End If
End Function
Die Abfrage muss dann ein UPDATE machen
UPDATE tblArtikelliste AS A
SET A.Funktionsprinzip = Leerzeichenweg(Funktionsprinzip)

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)