• 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.

omzetten in hoofdletter in een werkblad maar in meerdere ranges

Status
Niet open voor verdere reacties.

hckruse

Gebruiker
Lid geworden
18 aug 2009
Berichten
10
Hallo,
Een range omzetten in een hoofdletter kan in de bijlage wel maar ik zou het graag willen laten gebeuren in verschillende ranges. Hier gaat ie iedere keer over de kop.
Wat moet ik aanpassen?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range
For Each Rng In Worksheets("Blad1").Range("A1:C10") ?????????????????
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
 

Bijlagen

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range
For Each Rng In Worksheets("Blad1").Range("A1:C10,A13:C23")
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
 
In plaats van gebruik te maken van het 'hele dure' event SelectionChange, kan je beter - in dit geval - gebruik maken van het Change-event. Je 'behandelt' dan alléén de cel die je hebt verlaten ipv dat je iedere keer bij elke cursorverplaatsing je code over alle cellen van dat bereik laat lopen...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("A1:C10,A13:C23")) Is Nothing Then
        Target.Value = StrConv(Target.Value, vbProperCase)
    End If

End Sub

Groet, Leo
 
Het een haalt nu weer het ander aan. Dit werkt goed, maar ik heb toch nog een vraag hierover. Als ik later de leters delete komt er een foutmelding.

fout 13 tijdens uitvoering
typen komen niet met elkaar overeen

valt hier nog iets over te zeggen?
Henk
 
valt hier nog iets over te zeggen?

Ik gok nu dus dat je mijn codeblokje hebt getest? Dan kan het kloppen dat het object 'target' z'n nek breekt als je meerdere cellen hebt geselecteerd. Zet dit regeltje maar direct onder de Sub.. en boven de 1e regel die er al stond.
Code:
If Target.Cells.Count > 1 Then Exit Sub

Groet, Leo
 
dank je. ik heb inderdaad jou code getest. ik ga deze toevoeging meenemen.
 
Ik heb een testblad gemaakt en daar werkt alles prima, ook het selecteren en deleten van een range gaat goed. Hij komt inderdaad niet meer met een foutmelding. In mijn sheet waar ik dit wilde inbouwen werkt het ook maar wel erg langzaam. Waarschijnlijk omdat hij elke keer de gehele range weer wil doorzoeken om letters om te zetten in hoofdletters. Ik weet nog niet hoe ik verder ga.
 
omdat hij elke keer de gehele range weer wil doorzoeken om letters om te zetten in hoofdletters

Maak je in je 'echte' workbook soms nog steeds gebruik van het SelectionChange-event??? Dit moet je dan veranderen in het Change-event! (dus neem mijn code 1 op 1 over)

Groet, Leo
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D7:BW36,D38:BW52,D61:BW90,D92:BW106,D115:BW144,D146:BW160,D169:BW198,D200:BW214,D223:BW252,D254:BW268,D277:BW306,D308:BW322,D331:BW360,D362:BW376")) Is Nothing Then
Target.Value = StrConv(Target.Value, vbProperCase)
End If
End Sub

Dit is zoals hij er nu instaat. Als ik een klein e a intik in de range verander hij vrij rap in een A en de cursor verlaat dan ook de cel snel. Maar het duurt erg lang voor de cursor weer vrijkomt en ik verder kan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan