VBA für den Code 160
#1
Hallo zusammen,

folgenden VBA-Code habe ich im Netz gefunden und für mich verwendet:

Quelle:
http://ms-excel.eu/vba/vba-textbehandlun...ernen.html

Sub Leerzeichen_entfernen()
Dim i As Integer
For i = 1 To 100
    Cells(i, 1) = Application.WorksheetFunction.Substitute(Cells(i, 1), Chr(160), "")
    'Das Leerzeichen ist kein Leerzeichen, sondern ein Code(160)
    'Das merkt man auf den ersten Blick aber nicht. Hier wird
    'der Code(160) gegen nichts ausgewechselt
Next
End Sub

Den Code konnte ich unkompliziert bei mir in einem Modul umsetzen. Mir ging es weiter noch darum, den Code beim Verlassen der aktiven Zelle bspw. durch die Enter-Taste ausführen zu lassen. Und hier war mein Problem, das ich nicht lösen konnte, da ich mich im VBA-Bereich überhaupt nicht bis sehr wenig auskenne.

Versuche nach dem trial and error Prinzip kamen dem, was ich wollte, schon recht nahe. Allerdings wurde das nachfolgende Makro ausgeführt, sobald irgendeine Zelle in dem Tabellenblatt angeklickt oder verlassen wurde.

Über Worksheet und SelectionChange

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
For i = 1 To 100
    Cells(i, 1) = Application.WorksheetFunction.Substitute(Cells(i, 1), Chr(160), "")
    'Das Leerzeichen ist kein Leerzeichen, sondern ein Code(160)
    'Das merkt man auf den ersten Blick aber nicht. Hier wird
    'der Code(160) gegen nichts ausgewechselt
Next
End Sub

Dass gleiche nur als Worksheet Change, führte bei mir zum Absturz der Mappe.

Formeln in Excel helfen mir an dieser Stelle nicht weiter, da ich Daten extern übernehme, die per kopieren/einfügen Befehl den Code 160 zum Teil enthalten. Hier sollte beim Verlassen der Zelle das Makro in dem Bereich bspw. A1:A100 ausgeführt werden, damit die Daten sofort bereinigt sind. Im Hintergrund läuft eine bedingte Formatierung. Ich kann mit dem Makro und der bedingten Formatierung dann sofort ermitteln, ob bei den übernommenen Daten Dubletten dabei sind ohne eine Hilfsspalte usw.

Würde mich freuen Hilfe zu bekommen.

Bis dahin nette Grüße
Volker
Top
#2
Hallo

ungetestet


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Application.EnableEvents = False
For i = 1 To 100
Cells(i, 1) = Application.WorksheetFunction.Substitute(Cells(i, 1), Chr(160), "")
    'Das Leerzeichen ist kein Leerzeichen, sondern ein Code(160)
    'Das merkt man auf den ersten Blick aber nicht. Hier wird
    'der Code(160) gegen nichts ausgewechselt
Next
Application.EnableEvents = True
End Sub


MfG Tom
[-] Folgende(r) 1 Nutzer sagt Danke an Crazy Tom für diesen Beitrag:
  • Umstaende_halber
Top
#3
Hi Tom,

vielen Dank, genau dies hat mein Problem gelöst. Probiert auf x64 Bit und 32 Bit.

Schneller geht es kaum noch. Hätte ich mich mal Früher gemeldet, wären mir einige Stunden Brüten erspart geblieben.  :18:
Top
#4
Keep it simple:


Code:
sheet1.cells.replace chr(160)," "
Top
#5
Hallo,

ungeprüft, also eher eine Konzeptidee als einVorschlag:


Code:
y = Activesheet.cells.replace(Chr(160), chr(32))


nur falls man sicher ist, dass chr(160) nicht gebraucht wird.

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Umstaende_halber
Top
#6
(07.01.2017, 15:04)Fennek schrieb: Hallo,

ungeprüft, also eher eine Konzeptidee als einVorschlag:


Code:
y = Activesheet.cells.replace(Chr(160), chr(32))


nur falls man sicher ist, dass chr(160) nicht gebraucht wird.

mfg

Sehr gute Idee mit dem Leerzeichen für den Fall das ich so etwas auch einmal dazwischen habe. Einfach Genial
Danke :97:
Top
#7
@Fen

Das nennt man 'Plagiat' ;)
Top
#8
@snb

sorry, als ich angefangen habe, war dein Eintrag noch nicht da. Dann war ich entsetzt, wie langsam ich tippe.

mfg
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste