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

Hoofdletters

  • Onderwerp starter Onderwerp starter jog
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

jog

Gebruiker
Lid geworden
4 mrt 2009
Berichten
69
Hallo,

In een bestand had ik graag een code die alle data van enkele kolommen verandert in hoofdletters indien die als kleine letters ingevoegd zijn.

In Excel2003 werkte dit perfect met UCase, maar in Excel2007 geeft dit bij mij steeds foutmeldingen in bepaalde kolommen (zie ander bericht).

ik had graag volgende formule toegepast, maar blijkbaar kan je slechts 2 ranges opgeven.
Iemand een idee hoe dit op te lossen?

Dit werkt niet
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each x In Range("g5:g75", "h5:h75", "o5:o75", "p5:p75", "q5:q75", "r5:r75", "s5:s75", "t5:t75", "u5:u75", "v5:v75", "w5:w75", "x5:x75", "y5:y75", "z5:z75", "aa5:aa75")

x.Value = UCase(x.Value)

Next
End Sub

Dit werkt wel

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each x In Range("g5:g75", "h5:h75")

x.Value = UCase(x.Value)

Next
End Sub

Ik kan het natuurlijk op de volgende niet-elegante manier oplossen, maar ik ben zeker dat men mij hier een meer esthetische oplossing kan aanbieden

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each x In Range("g5:g75", "h5:h75")
x.Value = UCase(x.Value)
Next

For Each x In Range("o5:o75", "p5:p75")
x.Value = UCase(x.Value)
Next

End Sub

enz, enz, enz, ....


Alvast bedankt
 
Laatst bewerkt:
Deze dan ook:

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each x In Range("g5:h75", "o5:aa75")

x.Value = UCase(x.Value)

Next
End Sub

Cobbe
 
Als je de code anders uitschrijft dan lukt het wel.
D.w.z. bijde range \lleen aan het begin en het einde aanhalingstekens.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each x In Range("g5:g75, h5:h75, O5:O75, P5:P75")

x.Value = UCase(x.Value)

Next
End Sub

Maar met een aaneengesloten bereik is de methode van Cobbe natuurlijk de aangewezen.

Mvg

Piet
 
Laatst bewerkt:
Allebei van harte bedankt,

zelf (newbie) meer dan een uur aan 't uitproberen geweest (wil niet onmiddelijk op forum vraagje stellen wegens te gemakkelijk) en na 15 minuten al 2 oplossingen -> THX

Het werkt dus idd, maar nu flikkert de cursor wel erg veel, werkt echt storend.


Misschien is er onder jullie wel iemand die een betere oplossing heeft voor mijn probleem?

Bedankt
 
Laatst bewerkt:
Probeer het eens met deze code

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, _
        Range("G5:H75,O5:AA75")) Is Nothing Then
        With Sheets("blad1")
            Target.Value = UCase(Target.Value)
        End With
    End If
End Sub

Mvg

Piet
 
Piet

De With...End With is hier overbodig. Kan gerust weg.

Wigi
 
Klopt natuurlijk.
Het staat al in de code voor Blad1

Dom,dom

Mvg

Piet

Gelukkig maken we allemaal vergissingen. Of zien we dingen over het hoofd.
Een fout vind ik in dit geval nogal een groot woord.

Ik kon het echter niet laten maarre .... het kan korter.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("G5:H75,O5:AA75")) Is Nothing Then Target.Value = UCase(Target.Value)

End Sub

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
hallo,

deze code werkt inderdaad wel, maar er doet zich in Excel2007 een probleem voor.
Wanneer in een cel van de range iets fout is ingetikt en je drukt op delete krijg je telkens een foutmelding. :evil:
 
Laatst bewerkt:
hallo,

deze code werkt inderdaad wel, maar er doet zich in Excel2007 het probleem voor.
Wanneer in een cel van de range iets fout is ingetikt en je drukt op delete krijg je telkens een foutmelding. :evil:

En zo?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("G5:H75,O5:AA75")) Is Nothing And Target <> "" Then Target.Value = UCase(Target.Value)

End Sub

Met vriendelijke groet,


Roncancio
 
lukt ook niet, moet je maar eens proberen in een leeg excel bestand -> geeft onmiddelijk foutmelding
 
lukt ook niet, moet je maar eens proberen in een leeg excel bestand -> geeft onmiddelijk foutmelding

Ik krijg geen foutmeldingen :cool: Maar ik heb hier 2003.
Geldt het voor al je bestanden?
Kan je het bestand posten?

Met vriendelijke groet,


Roncancio
 
in 2003 had ik ook nooit problemen, maar in 2007 blijkbaar wel
 
Na lang zoeken heb ik eindelijk een code gevonden die mijn probleem in excel2007oplost

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 Or Target.HasFormula Then Exit Sub

    On Error Resume Next

    If Not Intersect(Target, Range("g5:h79,o5:aa79")) Is Nothing Then

        Application.EnableEvents = False

        Target = UCase(Target)

        Application.EnableEvents = True

    End If

    On Error GoTo 0

End Sub

Bedankt aan al diegenen die meegezocht hebben :thumb:
 
Het feit is gewoon dat:

Code:
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True

erin moet staan, dat heeft niets met 2003 of 2007 te maken.
 
en toch werkt de code van roncancio WEL in 2003 en NIET in 2007

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("G5:H75,O5:AA75")) Is Nothing Then Target.Value = UCase(Target.Value)
End Sub
 
Ook zo een verschil tussen 2003 en 2007 ?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("G5:H75,O5:AA75")) Is Nothing and target.cells.count=1 Then Target.Value = UCase(Target.Value)
End Sub
 
Ook zo een verschil tussen 2003 en 2007 ?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("G5:H75,O5:AA75")) Is Nothing and target.cells.count=1 Then Target.Value = UCase(Target.Value)
End Sub


Of er een verschil is kan ik momenteel niet testen, wat ik wel weet is dat deze code in 2007 een foutmelding geeft bij delete van data.
 
Waarom wordt de suggestie van Wigi niet meegenomen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Target, Range("G5:H75,O5:AA75")) Is Nothing And Target.Cells.Count = 1 Then Target.Value = UCase(Target.Value)
Application.EnableEvents = True
End Sub

Het werkt als een tierelier.

Mvg

Piet
 
Inderdaad Piet,

deze doet het inderdaad uitstekend en is heel wat esthetischer dan mijn code, waarvoor dank. :thumb:

Ik zet deze code in elk werkblad, maar is het ook mogelijk om ThisWorkbook éénmaal een code in te geven voor alle nodige werkbladen?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan