Hallo zusammen,
könnt Ihr mir bitte behilflich sein und den vorhandenen Code statt für links auf rechts abändern.
Ich verstehe die Logik dahinter nicht und benötige somit Eure Hilfe.
Option Compare Database
Option Explicit
'If Left$(strText, 1) = " " Then / Leerzeichen am Anfang werden entfernt
Function LeerzeichenWeg(strText As String) As String
Dim I As Integer
For I = 1 To Len(strText)
If Left$(strText, 1) = " " Then
strText = Right$(strText, Len(strText) - 1)
Else
Exit For
End If
Next I
LeerzeichenWeg = strText
End Function
Gruß Torsten
Hallo,
oder einfach so:
Function LeerzeichenWeg(strText As String) As String
LeerzeichenWeg = Trim(strText)
End FunctionEntfernt alle Leerzeichen vorn und hinten.
...oder Rtrim(... entfernt nur rechts.
Gruß
Andreas
... oder LTrim(... entfernt nur links. ;D ;) :)
Guten Morgen,
vielen Dank für die "einfache" Lösung.
Ich möchte Euch bitten den von mir angezeigten Code von left nach right umzuschreiben, damit ich nachvollziehen kann was geändert werden muß.
Ich habe gestern eine längere Zeit versucht den Code anzupassen - leider ohne Erfolg.
Ich würde das Ergebnis gerne sehen um die Logik dahinter zu verstehen.
Vorab vielen Dank.
Gruß Torsten
Hallo,
hast du schon mal versucht den Code im Einzelschritt zu durchlaufen?
Dazu Stopp Zeile einfügen mit F8 geht es dann weiter.
Hallo,
ich werde es probieren:
Wo finde ich:
ZitatStopp Zeile einfügen
Hallo
die Stopp Zeile musst du selbst einfügen
Offensichtlich hast du keine Kenntnisse von VBA, dann wird das natürlich etwas schwieriger.
Tip: Für Rechts musst du von hinten anfangen.
Hallo Torsten,
ZitatIch möchte Euch bitten den von mir angezeigten Code von left nach right umzuschreiben
Hat Klaus doch in #1 schon gemacht. Musst du nur noch das "L" ergänzen, s. #3.
gruss ekkehard
Hallo Klaus, jetzt bleibe ich dran ;)
Richtig keine Erfahrung...
Zitatdie Stopp Zeile musst du selbst einfügen
Wie sieht die Stopp Zeile geschrieben aus?
ZitatTip: Für Rechts musst du von hinten anfangen.
Ja, beim probieren habe ich auch ein Augenmerk auf die Zahlen gelegt, gehe aber davon aus das aus
If Left$(strText, 1) --> If Right$(strText, 1)wird und aus
strText = Right$(strText, Len(strText) - 1 --> strText = Left$(strText, Len(strText) - 1 wird.
Ist der Gedanke mit dem vertauschen von Left/Right der falsch weg, "nur" die Zahlen anpassen?
@ Ekkehard
Ja das habe ich gesehen und bestätigt, ich möchte aber verstehen wie der o.g. Code für Right ist, daher meine Nachfragen.
Gruß Torsten
Hast du mal den Cursor auf die Funktion (Left/Right) gesetzt und F1 gedrückt?
Ach ja
...
Stop
...
Angesichts der vorhandenen Funktionen Trim/R-und LTrim sollte der anfangs gezeigte Code schlicht eingestampft werden.
Als Anfangslekture für VBA gibt es da z.B.
https://www.vba-tutorial.de/ (https://www.vba-tutorial.de/)
Hallo,
hier mal für rechte LZ.
Function LeerzeichenWeg(strText As String) As String
Dim I As Integer
For I = Len(strText) To 1 Step -1 'von hinten anfangen
If Right$(strText, 1) = " " Then
strText = Left$(strText, Len(strText) - 1)
Else
Exit For
End If
Next I
LeerzeichenWeg = strText
End Function
Hallo Klaus,
vielen Dank für die Änderung.
Ich habe vorhin bei meinen Proben einfach Left$ und Right$ ausgetauscht, ohne wie gestern an den Zahlen herum zu probieren. Das hat dann funktioniert siehe Code:
Option Compare Database
Option Explicit
'If Right$(strText, 1) = " " Then / Leerzeichen am Ende werden entfernt
Function LeerzRechtsWeg(strText As String) As String
Dim I As Integer
For I = 1 To Len(strText)
If Right$(strText, 1) = ")" Then
strText = Left$(strText, Len(strText) - 1)
Else
Exit For
End If
Next I
LeerzRechtsWeg = strText
End Function
Nun hast Du in Deinem Code die folgende Zeile zusätzlich geändert:
For I = Len(strText) To 1 Step -1 'von hinten anfangen
Würdest Du bitte versuchen mir das noch zu erklären?
Gruß Torsten
Was gibt es da noch zu erklären, was denkst du wozu Klaus den
Kommentar dazu geschrieben hat.
Und warum willst du jetzt plötzlich eine ")" löschen? Es ging
doch um Leerzeichen.
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
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.
@klaus@Beaker
@MzKlMuIf 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
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.
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
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.
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
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 FunctionBesser wäre es allerdings, wenn man den Ersteller der Excel-Datei dazu überreden
könnte eine "saubere" zur Verfügung zu stellen.
gruss ekkehard
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
Function LeerzeichenWeg(strText As String) As String
If Right(strText, 2) = " " Then
LeerzeichenWeg = Left(strText, Len(strText) - 2)
Else
LeerzeichenWeg = strText
End If
End FunctionFrag mich nicht, warum ich beim letzten Mid verwendet habe; und sorry wegen
des vergessenen Else-Zweigs.
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
Hallo,
wo ist denn da ein Tab Zeichen?
Du musst den ASCII Code der letzten Zeichen ermitteln und dann gezielt löschen.
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
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/
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
Ich habe Inhalte aus der Exceltabelle nach Notepad++ kopiert und sehe da am Ende jeweils Zeilenumbrüche.
=> Replace(Content, vbCrLf, "")ZitatWie kann man einen Ascii Code ermitteln wenn man kein Zeichen hat?
Zeichenweise analysieren.
For i = 1 To Len(Content)
Debug.Print Asc(Mid(Content, i, 1))
NextEine Analyse, was man wirklich hat, sollte nun der erste Schritt sein, besonders wenn eigene Annahmen sich als nicht richtig herausstellen.
Jetzt funktioniert es, prima.
@Klaus:
Ich konnte Dein Vorschlag
MsgBox Asc(Right(strText, 1)) nachvollziehen und die 9 kam raus.
@Ekkehard:
Ich denke das Du mit dem Tab schon richtig gelegen hast, denn der Ascii Code für ein Tab ist lt. Google die 9.
Meine Abfrage in Google:
Zitatwelchen ascii code hat ein tabulator
Die Antwort:
ZitatDas übliche Tabulatorzeichen ist das Horizontaltabulator-Zeichen (HT), das in ASCII und Unicode den Codepunkt 9 hat und als Strg + I...
Vielen Dank für Eure Hilfe, Problem gelöst.
@Ekkehard:
Jetzt noch 3 Punkte in Berlin und wir beide sind zufrieden :)
Hallo Eberhard,
ZitatIch habe Inhalte aus der Exceltabelle nach Notepad++ kopiert und sehe da am Ende jeweils Zeilenumbrüche.
Jau, aber als Zeichen davor wurde bei mir so ein Pfeil nach rechts
angezeigt, was ja den TAB repräsentiert und sich ja auch als richtig
herausgestellt hat.
So ist die Prozedur allerdings nicht sehr flexibel. Eine Prüfung gegen
gültige Zeichen wäre da besser.
gruss ekkehard
@Torsten ZitatJetzt noch 3 Punkte in Berlin und wir beide sind zufrieden :)
?