spaties verwijderen in excel

Status
Niet open voor verdere reacties.

pvanbrakel

Gebruiker
Lid geworden
2 dec 2010
Berichten
35
Goedemorgen,

Ik heb een tijdje geleden een macro opgenomen en langzamerhand ben ik hem aan het aanpassen.

Nu wil ik dat de macro helemaal in het begin alle spaties verwijderd in het bestand. Daarvoor heb ik deze macro gevonden:
Code:
Sub TrimSelectie()
    Application.ScreenUpdating = False
    [COLOR="red"]Dim Kolom, Cel As Range[/COLOR]
    Kolom = InputBox(" kolom ? ")
    lastrij = Cells(65536, Kolom).End(xlUp).Row
    For Each Cel In Range(Cells(1, Kolom), Cells(lastrij, Kolom))
        Cel.Value = LTrim(RTrim(Cel.Value))
        Cel.Value = Replace(Cel.Value, " ", "")
    Next
    MsgBox "De selectie is getrimd"
End Sub

Maar als ik de rode zin invoer krijg ik de melding: This action will reset your project, proceed anyway.
De vraag is dus of iemand deze macro in mijn macro kan implementeren. Het moet nog voordat hij naar de termen CGX, CGY en CGZ gaat zoeken, want daar staan soms spaties voor en dan pakt hij hem niet, en hij moet exact op die termen blijven zoeken omdat er meerdere keren deze term voorkomt.

Code:
Sub filteren()

'
    Set CGZ = Range("A1:Z1").Find("CGZ", LookIn:=xlValues, LookAt:=xlWhole)
    If CGZ Is Nothing Then
      MsgBox "Kan de waarde CGZ niet vinden!"
       Exit Sub
    End If
    Set CGY = Range("A1:Z1").Find("CGY", LookIn:=xlValues, LookAt:=xlWhole)
    If CGY Is Nothing Then
      MsgBox "Kan de waarde CGY niet vinden!"
       Exit Sub
    End If
    Set CGX = Range("A1:Z1").Find("CGX", LookIn:=xlValues, LookAt:=xlWhole)
    If CGX Is Nothing Then
       MsgBox "Kan de waarde CGX niet vinden!"
       Exit Sub
    End If
    Range("A2").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">-10", Operator:=xlAnd, _
        Criteria2:="<12216"
    Selection.AutoFilter Field:=CGY.Column, Criteria1:=">-10500", Operator:=xlAnd, _
        Criteria2:="<62500"
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">-15300", Operator:=xlAnd, _
        Criteria2:="<15300"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Sheets("All").Select
    Application.CutCopyMode = False
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">62500", Operator:=xlAnd, _
        Criteria2:="<185300"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Sheets("All").Select
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">12216", Operator:=xlAnd, _
        Criteria2:="<18616"
    Selection.AutoFilter Field:=CGY.Column, Criteria1:=">-10500", Operator:=xlAnd, _
        Criteria2:="<57900"
    Application.CutCopyMode = False
    Range("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("D36").Select
    Sheets("All").Select
    Range("G707").Select
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">57900", Operator:=xlAnd, _
        Criteria2:="<190500"
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">12216", Operator:=xlAnd, _
        Criteria2:="<25738"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("All").Select
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">25738", Operator:=xlAnd, _
        Criteria2:="<40730"
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">111300", Operator:=xlAnd, _
        Criteria2:="<175700"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("All").Name = "all"
    Sheets("Sheet1").Name = "blok1"
    Sheets("Sheet2").Name = "blok 234"
    Sheets("Sheet3").Name = "blok 5aft"
    Sheets("Sheet4").Name = "blok 5fwd+6"
    Sheets("Sheet5").Name = "blok7"
    Sheets("all").Select
    Selection.AutoFilter Field:=CGX.Column
    Selection.AutoFilter Field:=CGY.Column
    Selection.AutoFilter Field:=CGZ.Column
End Sub


Bedankt alvast!
 
De bovenste macro moet dus in de onderste, had niet bijgezet welke macro nou wat wat.

:o
 
Misschien wil ik eerst opmerken dat dit:

Code:
Cel.Value = LTrim(RTrim(Cel.Value))
Cel.Value = Replace(Cel.Value, " ", "")

dubbelop is. De tweede lijn verwijderd alle spaties. De eerste lijn verwijderd alle spaties aan het begin en eind van de cell tot de eerste niet-spatie.

neem " hallo daar "

output eerste regel: "hallo daar"
output tweede regel: "hallodaar"

Eerste regel kan ook met:

Code:
Cel.Value = Trim(Cel.Value)

De volgende vraag is, waarom je een input wil vragen als je het hele sheet wil behandelen. Indien je de verwachte range al weet zou je dit kunnen afkorten tot:

Code:
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = false
    For Each Cel In Range("a1:z4000")
        Cel.Value = Trim(Cel.Value)
    Next
Application.ScreenUpdation = true
Application.Calculation = xlCalculationAutomatic
Application.Calculate
 
Laatst bewerkt:
Uhm... ik ben echt een nono op dit gebied betreffende.
Ik had deze macro gevonden, maar ik wist niet of hij toe te passen was.
 
This action will reset your project, proceed anyway.
Boodschap komt als je bepaalde regels toegevoegd terwijl de macro nog actief is. Kan je zien als er ergens een gele regel is. Eerst de macro stoppen, toevoegen en opnieuw uitvoeren

Ron
 
Indien de range correct is voor je normale gebruik (a1:z4000) kun je mijn code direct kopieren in je code. Indien de grootte dynamisch moet zijn slechts een paar regels meer nodig.

Maar moeten nu alle spaties verwijderd worden? of alleen de spaties aan het begin en eind? In geval van een enkel woord in de cel is er uiteraard geen verschil
 
Maar moeten nu alle spaties verwijderd worden? of alleen de spaties aan het begin en eind? In geval van een enkel woord in de cel is er uiteraard geen verschil

alle spaties, ik heb toch maar vaak 1 woord/getal dus en die ene uitzondering is niet zo boeiend.

:) bedankt maar weer, ik plak de code erin en dan kijk ik even of hij werkt.

groetjes
 
ik krijg nu:

Run-time error 438
Object doesn't support this property or method

Code:
Sub filteren()
'   Application.Calculation = xlCalculationManual
    [COLOR="red"]Application.ScreenUpdation = False[/COLOR]
    For Each Cel In Range("a1:z4000")
        Cel.Value = Trim(Cel.Value)
    Next
    Application.ScreenUpdation = True
    Application.Calculation = xlCalculationAutomatic
    Application.Calculate
    
    Set CGZ = Range("A1:Z1").Find("CGZ", LookIn:=xlValues, LookAt:=xlWhole)
    If CGZ Is Nothing Then
      MsgBox "Kan de waarde niet vinden!"
       Exit Sub
    End If
    Set CGY = Range("A1:Z1").Find("CGY", LookIn:=xlValues, LookAt:=xlWhole)
    If CGY Is Nothing Then
      MsgBox "Kan de waarde niet vinden!"
       Exit Sub
    End If
    Set CGX = Range("A1:Z1").Find("CGX", LookIn:=xlValues, LookAt:=xlWhole)
    If CGX Is Nothing Then
       MsgBox "Kan de waarde niet vinden!"
       Exit Sub
    End If
    Range("A2").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">-10", Operator:=xlAnd, _
        Criteria2:="<12216"
    Selection.AutoFilter Field:=CGY.Column, Criteria1:=">-10500", Operator:=xlAnd, _
        Criteria2:="<62500"
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">-15300", Operator:=xlAnd, _
        Criteria2:="<15300"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Sheets("All").Select
    Application.CutCopyMode = False
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">62500", Operator:=xlAnd, _
        Criteria2:="<185300"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Sheets("All").Select
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">12216", Operator:=xlAnd, _
        Criteria2:="<18616"
    Selection.AutoFilter Field:=CGY.Column, Criteria1:=">-10500", Operator:=xlAnd, _
        Criteria2:="<57900"
    Application.CutCopyMode = False
    Range("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("D36").Select
    Sheets("All").Select
    Range("G707").Select
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">57900", Operator:=xlAnd, _
        Criteria2:="<190500"
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">12216", Operator:=xlAnd, _
        Criteria2:="<25738"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("All").Select
    Selection.AutoFilter Field:=CGZ.Column, Criteria1:=">25738", Operator:=xlAnd, _
        Criteria2:="<40730"
    Selection.AutoFilter Field:=CGX.Column, Criteria1:=">111300", Operator:=xlAnd, _
        Criteria2:="<175700"
    Columns("A:N").Copy
    Sheets.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("All").Name = "all"
    Sheets("Sheet1").Name = "blok1"
    Sheets("Sheet2").Name = "blok 234"
    Sheets("Sheet3").Name = "blok 5aft"
    Sheets("Sheet4").Name = "blok 5fwd+6"
    Sheets("Sheet5").Name = "blok7"
    Sheets("all").Select
    Selection.AutoFilter Field:=CGX.Column
    Selection.AutoFilter Field:=CGY.Column
    Selection.AutoFilter Field:=CGZ.Column
End Sub
 
ScreenUpdation

Dit is fout, moet zijn ScreenUpdating


Dit soort tikfouten is onnodig. Als je application. tikt dan zal VBA suggesties doen voor de properties achter de punt. Hier kan je dan klikken en het probleem doet zich niet voor

Ron
 
Laatst bewerkt:
fout van mijn kant. Waarschijnlijk bij het knippen/plakken wat verfouterd
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan