• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Gegevensvalidatie en automatisch corrigeren

Status
Niet open voor verdere reacties.

Boboes

Gebruiker
Lid geworden
5 nov 2016
Berichten
45
In bijgaand simpel voorbeeldbestandje wil ik bepaalde controles en automatische correcties uitvoeren op kolom B (voorletters) en C (voorvoegsels) zodra deze worden ingevuld.

Voor kolom B is het de bedoeling dat er alleen maar letters (a-z en A-Z) mogen worden ingevuld, dus geen puntjes, komma’s, spaties of andere tekens. Tevens maximering op 5 letters.
De niet-lettertekens zouden bij invoer direct verwijderd moeten worden. Ik heb dat voor het verwijderen van punten wel voor elkaar gekregen (bijv. A.B. wordt direct AB), maar hoe doe je dat voor de overige tekens?
Bij de maximering op 5 letters dienen letters vanaf de 6e letter genegeerd te worden. Dus JHRTGW moet worden JHRTG. In combinatie met het vervangen van puntjes zou bijvoorbeeld de invoer G.A.D.J. direct omgezet moeten worden GADJ.

Voor kolom C is het de bedoeling dat er alleen maar letters, spaties en het teken ‘ (zoals bij “van ‘t”) mogen worden ingevuld, dus geen punten, komma’s en andere tekens. Maar hier geen automatische vervanging, maar melding (stopper) dat invoer onjuist is. Tevens gemaximeerd op 8 letters.
 

Bijlagen

  • TEST_sjabloon.xls
    38 KB · Weergaven: 50
Beste,

Ik heb kolom B voor jou opgelost, kolom C is voor jou :)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim r As Range
    
    Set r = Target.Cells(1)
    
    If r.Column = 2 Then

        For i = 1 To Len(r.Value)
            If Mid(r.Value, i, 1) Like "[a-zA-Z]" Then
                s = s & Mid(r.Value, i, 1)
            End If
        Next
        
        If Len(s) >= 5 Then
            Application.EnableEvents = False
            r.Value = Left(s, 5)
            Application.EnableEvents = True
        End If

    End If

End Sub
 
Beste Wigi,

Bedankt voor de hulp.
Weer wat nieuws geleerd over 'Like' :) Op zich zou het mij nu ook wel moeten lukken met kolom C, maar zit nog met probleem bij kolom B. Met jouw code wordt 'a.b.c.d.e.f.g.' netjes omgezet naar 'abcde' (dus zonder punten en gemaximeerd op 5 letters), maar 'a.b.' wordt nu geen 'ab'. of 'a.b.c.d.' geen 'abcd'.
Ik heb wat dingen uitgeprobeerd maar krijg het niet voor elkaar....

Christ
 
Doe het eens zonder de 'if' constructie Christ.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim r As Range, i As Long, s As String
    
    Set r = Target.Cells(1)
    
    If r.Column = 2 Then


        For i = 1 To Len(r.Value)
            If Mid(r.Value, i, 1) Like "[a-zA-Z]" Then
                s = s & Mid(r.Value, i, 1)
            End If
        Next
        
        'If Len(s) >= 5 Then
            Application.EnableEvents = False
            r.Value = Left(s, 5)
            Application.EnableEvents = True
        'End If


    End If


End Sub
 
Inderdaad, zonder de If-constructie werkt het helemaal perfect! Hoe makkelijk kan het (achteraf) zijn...:d
Bedankt Harry en Wigi voor jullie hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan