Einzug versus Trim
#1
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?
Antwortento top
#2
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
Antwortento top
#3
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.
Antwortento top
#4
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
Antwortento top
#5
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
Antwortento top
#6
Hallo,

versuchs mal so

Code:
Sub prcX()
  
   If Selection.HorizontalAlignment = -4131 Then
      Selection.InsertIndent -Selection.IndentLevel
   End If
End Sub
Gruß Stefan
Win 7 / Office 2007
Antwortento top
#7
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.
Antwortento top


Gehe zu:


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