Clever-Excel-Forum

Normale Version: Einzug versus Trim
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebes Forum und Experten,

ihr kennt alle die Trim Funktion um führende- und nachfolgende Leerzeichen mittels VisualBasic zu entfernen.
Damit habe ich jetzt ein Problem. Die Befehlszeile:  Range("A1") = Trim(Range("A1"))  liefert bei mir keine linksbündige
Schrift. Es bleibt alles beim alten.  Schuld daran ist offensichtlich der gesetzte "Einzug". Drücke ich zweimal auf den Befehl
Einzug verkleinern, habe ich meine linksbündige Schrift. Die Makrorekorderaufzeichnung lieferte mir für diesen
Befehl: Selection.InsertIndent -1. Mein Problem ist nun Programmierung dieses Befehls mittels Visual Basic.
Das Programm muss natürlich automatisch wissen, wie oft der Einzug zu verkleinern ist, damit die
Schrift linksbündig ist. Analog wie Trim "weiß" vieviel führende Leerzeichen es zu entfernen hat und dies auch automatisch macht.

Wie folgt die programmiertechnische Umsetzung?
Hallo

es werden doch gleich alle Leerzeichen entfernt!?
was spricht hier gegen?

Code:
Sub test()
   Range("A1") = Trim(Range("A1"))
   Range("A1").HorizontalAlignment = xlLeft
End Sub


MfG Tom
Hallo Tom,
zunächst einmal schon Danke für deine Antwort. Aber bei deinem Makro passiert gar nichts.
Linksbündigkeit wird erreicht durch (Makrorekorderaufzeichnung):


Code:
Sub Makro1()
   Selection.InsertIndent -1
   Selection.InsertIndent -1
End Sub

Meine Frage ist jetzt eben die Automatisierbarkeit. In diesem Fall reichte zweimal Einzug verkleinern. Ich habe aber tausende von Zellen mit Text aus einem OCR Programm.
Das Makro, bzw. die Befehle müssen selbstätig wissen wie oft der Einzug zu verkleinern ist. Klar, ich könnte eine Schleife schreiben. 100 mal for Schleife durchlaufen lassen, dann
gehts auch. Das ist aber nicht intelligent programmiert.
Hi

dann zähle doch vorher die Einzüge

Code:
Sub test()
   Dim iEinzug As Integer
   iEinzug = Range("A1").IndentLevel
   Range("A1") = Trim(Range("A1"))
   Range("A1").InsertIndent -iEinzug
End Sub
hiervon abgeleitet

http://www.office-loesung.de/ftopic165966_0_0_asc.php

MfG Tom
Hi

und falls kein Einzug vorliegt

Code:
Sub test()
   Dim iEinzug As Integer
   iEinzug = Range("A1").IndentLevel
   Range("A1") = Trim(Range("A1"))
   If iEinzug > 0 Then Range("A1").InsertIndent -iEinzug
End Sub

MfG Tom
Hallo,

versuchs mal so

Code:
Sub prcX()
  
   If Selection.HorizontalAlignment = -4131 Then
      Selection.InsertIndent -Selection.IndentLevel
   End If
End Sub
Hallo Leute,

muss leider gleich aus dem Haus. Aber eure Lösungen scheinen zu funktionieren. Danke schon mal für eure Hilfe und euch einen schönen Abend.