Wisselen tussen hoofdletters en kleine letters
- 13/10/2012
Inleiding
Kleine stukjes VBA code en ingebouwde functies kunnen ons in Excel helpen om de tekst in cellen om te zetten: in HOOFDLETTERS, kleine letters, Afwisselend Grote En Kleine Letters, of Enkel de eerste letter een hoofdletter. In de VBA code blokken kan de gebruiker gevraagd worden om zijn/haar keuze te maken. De basisfunctie die we toepassen is de StrConv functie in VBA. Met gewone Excel functies zou je dit ook kunnen doen, maar heb je meer werk. Gebruik de functies HOOFDLETTERS, KLEINE.LETTERS en BEGINLETTERS. Overigens is deze functionaliteit ook aanwezig bij de ASAP-utilities.
Onderstaande, uitermate interessante tekst, zouden we graag automatisch omzetten. De dummy tekst is afkomstig van de website lipsum (lorem ipsum). Het gaat om vaste tekst, en geen tekst die het resultaat is van formules.
Inputbox
In onderstaande code listing kan de gebruiker een keuze maken voor de omzetting:
- keuze 1: hoofdletters
- keuze 2: kleine letters
- keuze 3: hoofdletters voor elk nieuw woord
- keuze 4: slechts 1 hoofdletter zoals in een zin
Sub ChangeCase_Inputbox()''''' ' VBA-code to change the case of texts ' 13/10/12 '''''Dim Rng As Range, iModus As Integer Do Until iModus >= 1 And iModus <= 4 iModus = Application.InputBox("Please choose 1 for UPPERCASE, 2 for lowercase, 3 for Proper Case, 4 for First letter only uppercase", "Case selection", 0, Type:=1) Loop On Error Resume Next For Each Rng In Selection.SpecialCells(2, 2).Cells If iModus = 4 Then Rng.Value = UCase$(Left(Rng.Text, 1)) & Mid$(Rng.Text, 2) Else Rng.Value = StrConv(Rng.Text, iModus) End If NextEnd Sub
Het valt op te maken dat er niet echt zeer veel code nodig is voor deze omzetting, zelfs niet als we 4 mogelijke varianten aanbieden aan de gebruiker. Uiteraard heeft dit te maken met de StrConv functie, die met argumenten 1, 2 en 3 reeds het vuile werk voor ons opknapt. Enkel keuze 4 implementeren is iets minder direct.
Automatisch wisselen
We kunnen een stap verder gaan. We laten code nagaan wat het gebruik van letters is in de eerste cel van de selectie. En dan kan een macro automatisch roteren tussen elk van de 3 mogelijke opties:
- staan er hoofdletters in de eerste cel, dan wordt alles kleine letters
- staan er kleine letters in de eerste cel, dan wordt alles met een hoofdletter voor elk nieuw woord
- anders worden het hoofdletters
Sub ChangeCase_Intelligence()''''' ' VBA-code to switch the case of texts automatically, inspecting existing case ' 13/10/12 '''''Dim Rng As Range, iModus As Integer On Error Resume Next With Selection.SpecialCells(2, 2) Select Case True Case .Cells(1).Text = UCase$(.Cells(1).Text): iModus = 2 Case .Cells(1).Text = LCase$(.Cells(1).Text): iModus = 3 Case Else: iModus = 1 End Select For Each Rng In .Cells Rng.Value = StrConv(Rng.Text, iModus) Next End WithEnd Sub
Let op dat je niet Option Compare Text opneemt bovenaan de module. In dat geval is a = A, b = B, etc., zodat de code het verschil niet kan maken. Laat dit ofwel weg, of neem Option Compare Binary op.
Random laten switchen
Als uitsmijter laten we het lot bepalen hoe we willen doordraaien. Met de Rnd functie trekken we een willekeurig getal tussen 0 en 1.
Sub ChangeCase_Random()''''' ' VBA-code to switch the case of texts in a random way ' 13/10/12 '''''Dim Rng As Range, iModus As Integer iModus = Int(Rnd() * 4) + 1 On Error Resume Next For Each Rng In Selection.SpecialCells(2, 2).Cells If iModus = 4 Then RRng.Value = UCase$(Left$(Rng.Text, 1)) & LCase$(Mid$(Rng.Text, 2)) Else Rng.Value = StrConv(Rng.Text, iModus) End If NextEnd Sub