VBA functie string beginnen met hoofdletter en dubbele spaties verwijderen

Status
Niet open voor verdere reacties.

Matjes

Gebruiker
Lid geworden
21 jun 2016
Berichten
80
Bij het invoeren van tekst in een tekstvak wil ik de invoer als volgt laten aanpassen:

-de regel altijd beginnen met een hoofdletter (verder mogen er in de tekst gewoon hoofdletters voorkomen);
-eventuele dubbele spaties in de regel verwijderen.

Ik zit te denken om met een after update event de functie aan te roepen.

Heeft iemand een voorbeeld of suggestie hoe dit in VBA te realiseren?

Alvast hartelijk dank voor de reacties.
 
AfterUpdate? Probeer het eerst eens met <Bij wijzigen>, dan kun je 'live' controleren of de invoer deugt. Zo kun je gelijk de eerste letter eventueel in een hoofdletter en een tweede spatie gelijk verwijderen. Daar merkt de gebruiker, als het goed is, helemaal niks van.
 
Hi Octafish, dat is inderdaad nog een beter idee. Kun je mij nog op weg helpen met de VBA code voor de functie?
 
Toch maar beginnen met de AfterUpdate omdat de check op spaties nogal gecompiceerd is. Daar heb je bij de AfterUpdate geen last van.

Code:
Private Sub Opmerking_AfterUpdate()
Dim str As String

    With Me.Opmerking
        Select Case Len(.Text)
            Case 1
                str = UCase(.Text)
            Case Is > 1
                str = UCase(Left(.Text, 1)) & Mid(.Text, 2, Len(.Text) - 1)
                Do Until InStr(1, str, "  ") = 0
                    str = Replace(str, "  ", " ")
                Loop
        End Select
        .Value = str
        .SelStart = Len(str)
    End With

End Sub
 
Hi OctaFish,

Hartelijk dank! Het werk perfect!

Ben nog nu aan het proberen deze code als function in een algemene module te plaatsten zodat ik deze vanuit meerdere tekstboxes en formulieren kan aanroepen. Dit lukt nog niet. Zou je dit stukje nog kunnen toevoegen aan de code :)
 
Da's maar een hele kleine aanpassing :)
Code:
Private Sub Opmerking_AfterUpdate()
    CheckTekst Me.Opmerking
End Sub

Code:
Function CheckTekst(ctl As Control)
Dim str As String

    With ctl
        Select Case Len(.Text)
            Case 1
                str = UCase(.Text)
            Case Is > 1
                str = UCase(Left(.Text, 1)) & Mid(.Text, 2, Len(.Text) - 1)
                Do Until InStr(1, str, "  ") = 0
                    str = Replace(str, "  ", " ")
                Loop
        End Select
        .Value = str
        .SelStart = Len(str)
    End With

End Function
 
Ah ha, ctl As control had ik niet toegepast. Nu werkt het wel!

Helemaal top, dank je :thumb:
 
Mag je de vraag op <Opgelost> zetten :).
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan