Nach genau vorgegebenen Kriterien eliminiere ich Leerzeichen in verschiedenen Spalten.
Nicht klar ist mir, weshalb diese auch in Spalte B eliminiert werden. In dieser Spalte ist der längste String über 40 Zeichen, und der müsste doch mit
lngLang abgefangen werden?
Wo mache ich wohl den Überlegungsfehler?
Gruss, Peter
Sub Leerzeilen()
Dim i As Integer, lngR As Long, strSp As String
Dim rng As Range
Dim lngLang As Long
'Bei jeder identifizierten Spalte werden die Leerzeichen entfernt.
With Application.WorksheetFunction
'Zeilen 1 bis 30 werden überprüft, kann bei Bedarf erweitert werden, jedoch nicht über 52, da ab Spalte 53 (BA)
'fixe Einträge generiert werden
For i = 1 To 30
lngR = Cells(Rows.Count, i).End(xlUp).Row 'der zu überprüfende Range innerhalb der Spalte i wird festgelegt
strSp = SpalteTxt_ausNum(i) 'mit Hilfe der Funktion wird ermittelt, welche(r) Spaltenbuchstabe die aktuelle Spalte hat
lngLang = Laengste(Sheets("CW").Range(Cells(1, i), Cells(lngR, i)))
If .CountIf(Sheets("CW").Columns(i), "*.*") > 0 Or .CountIf(Sheets("CW").Columns(i), "*-*") > 0 And _
.Max(Sheets("CW").Columns(i)) lngLang 'hier wird überprüft, ob der Bereich die vorne beschriebenen 3 Bedingungen
'kumulativ erfüllt
Set rng = Range(Cells(1, i), Cells(lngR, i)) 'wenn die Bedingungen kumulativ erfüllt werden, werden im aktuellen Bereich alle
'Leerzeichen eliminiert
If Not rng Is Nothing Then rng.Replace What:=" ", Replacement:="", LookAt:=xlPart
End If
Next
End With
End Sub
Function SpalteTxt_ausNum(iNr As Integer) 'diese Funktion ermittelt den Buchstaben der Spalte i
SpalteTxt_ausNum = Left(Cells(1, iNr).Address(0, 0), 1 - (iNr > 26) - (iNr > 702))
End Function
Public Function Laengste(Bereich As Range) As Long
Dim Zelle As Range
For Each Zelle In Bereich
If Len(Zelle) > Laengste Then Laengste = Len(Zelle)
Next Zelle
End Function