Microsoft Excel

Herbers Excel/VBA-Archiv

Leerstellen vor Text erkennen


Betrifft: Leerstellen vor Text erkennen von: Silas
Geschrieben am: 13.07.2017 13:52:21

Hallo,

ich nutze die Webseiten-Import Funktion von Excel. Im Text der Webseite sind allerdings Stichpunkte enthalten. Excel übernimmt diese nicht, sondern macht stattdessen einen kleinen Absatz vor den Text, wo normalerweise der Stichpunkt (-) wäre. Dies ist aber kein richtiger Absatz, wie er mit "Tab" erzeugt werden kann. Es ist quasi nur ein Leerzeichen, welches ich allerdings nicht abfangen kann. Wenn ich mir das erste Zeichen der Zelle ausgeben lasse (Left(...,1)), bekomme ich nicht das Leerzeichen, sondern den ersten Buchstaben.

Hat jemand eine Idee, wie ich per VBA abfragen kann, ob der Text in der Zelle eingerückt ist? Sobald ich den in der Zelle enthaltenen Text in einem String speichere, werden die Leerzeichen ignoriert. Die "Trim"-Funktion erkennt das Leerzeichen demnach auch nicht.

Vielen Dank schon mal im Voraus!

Grüße
Silas

  

Betrifft: Datei bitte...owT von: Max2
Geschrieben am: 13.07.2017 13:53:29




  

Betrifft: AW: Datei bitte...owT von: Silas
Geschrieben am: 13.07.2017 14:04:50

Hier ist eine Beispiel-Datei. Dort kann man gut erkennen, dass die Anzahl der Leerstellen unterschiedlich sein kann, was ich gerne abfangen würde.

https://www.herber.de/bbs/user/114864.xlsx


  

Betrifft: Hmm... von: Max2
Geschrieben am: 13.07.2017 14:32:56

Hallo,

leider sehe ich da keine Möglichkeit, das ganze Sinnvoll in Excel VBA
abzufangen.

Die Leerstelle Existiert nur in der Zelle aber nicht im Zellwert.

Hau den unten stehenden Code mal in den Code des Tabellenblattes und
mache einen doppelklick auf die Zelle mit dem Text "1-fach eingerückt" und
drücke danach ENTER
Mache das gleiche mit "2-fach eingerückt"
Im Direktfenster, siehst du wie sich die Spaltenbreiten verändert haben.
Vielleicht kannst du damit was machen.
Du könntest beispielsweise, den String in eine Andere Spalte setzten, prüfen welche breite diese hat
und dann prüfen welche breite die Ursprungsspalte hat.
An der Differenz könntest du ermitteln, ob du jetzt Leerstellen hast oder nicht, bzw. die Zelle und ihren Wert dann dementsprechend abändern.

Hier Code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As String
Dim colLength As Double
Dim newLength As Double

    s = Target.Value
    colLength = Target.ColumnWidth
    Target.Columns.AutoFit
    newLength = Target.ColumnWidth
    Debug.Print s & " --- " & colLength & " --- " & newLength
    
End Sub
Hier dass, was dabei rauskommt:
1-fach eingerückt --- 10,71 --- 17
2-fach eingerückt --- 17 --- 19,57




  

Betrifft: AW: Hmm... von: Silas
Geschrieben am: 13.07.2017 15:01:23

Wow! Super, dass du da etwas gefunden hast. Da wäre ich nie drauf gekommen...

Hast du eine Idee, wie ich das sinnvoll automatisieren kann?
Ich würde jetzt einfach per Makro Zeile für Zeile durchgehen, AutoFit ausführen und anschließend die Änderung der Zellbreite auswerten.
Meinst du, das funktioniert so ordentlich und in einem annehmbaren Zeitrahmen, auch für mehrere hundert Zeilen? Die Daten stehen nämlich auch alle in einer Spalte.


  

Betrifft: AW: Hmm... von: Max2
Geschrieben am: 13.07.2017 15:20:37

Hallo,

geht es denn darum, den Stichpunkt strich einzufügen, oder
nur darum, dass dieser abstand weg geht?

Wenn er nur wegsoll, dann empfehle ich Werners ClearFormatting
Das ganze so zu machen, wie ich es gesagt habe, würde einen
ziemlichen murks und Workaround Code fabrizieren.
Ob es am ende funktioniert ist dann nicht garantiert, aber man investiert viel zeit da rein.

Wenn es nur im die Striche geht, würde ich mir überlegen, ob es denn wirklich so schlimm ist,
dass diese fehlen.


  

Betrifft: AW: Datei bitte...owT von: Werner
Geschrieben am: 13.07.2017 14:51:48

Hallo Silas,

in deiner Testdatei habe ich es damit raus gebracht:

Public Sub Leer_weg()
With Worksheets("Tabelle1").Columns(1)
    .ClearFormats
End With
End Sub
Gruß Werner


  

Betrifft: AW: Datei bitte...owT von: Silas
Geschrieben am: 13.07.2017 15:27:31

Hallo zusammen,

ich möchte die Leerstellen gerne durch Stichpunkte ersetzen. Deshalb ist es auch wichtig abzufangen, wie viele Leerstellen vorm Text sind.
Ich habe schon eine Version ohne Stichpunkte geliefert, möchte aber trotzdem eine Version mit Stichpunkten entwickeln, um diese bei Bedarf zu liefern.
Ich werde mal ein bisschen rumprobieren, wie sinnvoll dieser Weg ist und was es vielleicht für Alternativen gibt. Falls euch noch was einfällt, könnt ihr es mich ja wissen lassen ;)

Ein großes Dankeschön an euch!

Gruß
Silas


  

Betrifft: AW: Datei bitte...owT von: Werner
Geschrieben am: 15.07.2017 10:03:14

Hallo Silas,

ich habe mal noch ein wenig herumexperimentiert. Versuch mal folgendes:

Public Sub Einrücken_raus()
Dim loLetzte As Long
Dim i As Long

Application.ScreenUpdating = False
With Worksheets("Tabelle1") 'Blattname anpassen
    loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 1 To loLetzte
            If .Cells(i, 1).HorizontalAlignment = xlLeft Then
                .Cells(i, 1).Value = "-" & .Cells(i, 1).Value
            End If
        Next i
    .Columns(1).HorizontalAlignment = xlGeneral
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner


  

Betrifft: AW: Datei bitte...owT von: Werner
Geschrieben am: 15.07.2017 10:23:25

Hallo Silas,

nach nochmaligem lesen deiner Beiträge habe ich gemerkt, dass du ja wohl jeweils so viele - vor den Werten haben willst, wie "Leerzeichen" vorhanden sind.

Dann versuch es mal so:

Public Sub Einrücken_raus()
Dim loLetzte As Long
Dim loLevel As Long
Dim strEinrücker As String
Dim i As Long
Dim j As Long

Application.ScreenUpdating = False
With Worksheets("Tabelle1") 'Blattname anpassen
    loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 1 To loLetzte
            If .Cells(i, 1).HorizontalAlignment = xlLeft Then
                loLevel = .Cells(i, 1).IndentLevel
                    For j = 1 To loLevel
                        strEinrücker = "-" & strEinrücker
                    Next j
                .Cells(i, 1).Value = strEinrücker & .Cells(i, 1).Value
            End If
            strEinrücker = ""
        Next i
    .Columns(1).HorizontalAlignment = xlGeneral
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner


Beiträge aus den Excel-Beispielen zum Thema "Leerstellen vor Text erkennen"