Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Automatisch Hoofdletters

3,515 views
Skip to first unread message

Belinda

unread,
Mar 11, 2009, 11:06:00 AM3/11/09
to
In een cel(len) waarin een plaatsnaam komt wil ik graag dat ongeacht de
invoer deze altijd in Hoofdletters komt.
Dus als ik Amsterdam invoer moet de cel weergave zijn AMSTERDAM
Hoe krijg ik dat voor elkaar?
bvd voor hulp

]-[oRus

unread,
Mar 11, 2009, 11:51:38 AM3/11/09
to
Belinda vertrouwde ons het volgende toe:

Excel kent geen opmaak voor tekst in cellen. Die wordt weergegeven
zoals die wordt ingevoerd.
Wel is er een functie die tekst omzet in hoofdletters =HOOFDLETTERS().
Maar die werkt natuurlijk niet op de invoercel. Wel kan je hiermee
elders de naam in hoofdletters krijgen.

Alternatief is met een event-routine in VBA.
Dat kan al met bv.
----------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
Target.Value = StrConv(Target.Value, vbUpperCase)
End If
End Sub
-----------
Zet dit in de code van het werkblad en pas het kolomnummer aan: 3=C.


--

Vriendelijke groeten,

]-[oRus
www.smallsystemservice.nl


Wigi

unread,
Mar 11, 2009, 2:22:02 PM3/11/09
to
Horus

Voeg nog

Application.EnableEvents = False

en

Application.EnableEvents = True

toe.


--
Wigi
http://www.wimgielis.be = Excel/VBA, soccer and music

]-[oRus

unread,
Mar 11, 2009, 3:02:12 PM3/11/09
to
Wigi vertrouwde ons het volgende toe:

> Horus
>
> Voeg nog
>
> Application.EnableEvents = False
>
> en
>
> Application.EnableEvents = True
>
> toe.
>
>
>

Want?

Wigi

unread,
Mar 11, 2009, 3:11:27 PM3/11/09
to
Horus

Zet het "immediate window" eens aan en gebruik deze code;

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
Target.Value = StrConv(Target.Value, vbUpperCase)

Debug.Print "wijziging"
End If
End Sub


--
Wigi
http://www.wimgielis.be = Excel/VBA, soccer and music

]-[oRus

unread,
Mar 11, 2009, 3:40:05 PM3/11/09
to
Wigi vertrouwde ons het volgende toe:

> Horus
>


> Zet het "immediate window" eens aan en gebruik deze code;
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> If Target.Column = 3 Then
> Target.Value = StrConv(Target.Value, vbUpperCase)
> Debug.Print "wijziging"
> End If
> End Sub
>
>
>

OK, Het verschil is wel duidelijk.
Maar mijn inside kennis van VBA is niet zo groot dat ik nu weet wat
precies de oorzaak is.
Ik begrijp dat er zonder die uit/inschakeling er heel vaak 'iets'
gebeurt (event), maar wat is dat dan waardoor de code kennelijk
honderden malen uitgevoerd wordt?

(overigens gebruik ik de code niet zelf, maar verzon die even voor de
OP)

jan

unread,
Mar 11, 2009, 4:27:47 PM3/11/09
to
]-[oRus,

Binnen de gebeurtenis Worksheet_Change wordt een verandering aangebracht in het
Worksheet, waardoor Worksheet_Change weer wordt aangeroepen, waarbinnen dus wéér een
verandering wordt aangebracht waardoor .........

Jan


]-[oRus

unread,
Mar 11, 2009, 5:03:19 PM3/11/09
to
jan vertrouwde ons het volgende toe:

Het is duidelijk.... Recursief event dus.

Wigi

unread,
Mar 11, 2009, 6:06:10 PM3/11/09
to
Inderdaad, telkens hetzelfde event wordt aangeroepen tot Excel vindt dat het
welletjes geweest is.

Soms komt het voor dat een wijziging in een kolom leidt tot een wijziging in
een andere kolom, dan hoeft die extra regel code natuurlijk niet.

--
Wigi
http://www.wimgielis.be = Excel/VBA, soccer and music

jan

unread,
Mar 12, 2009, 4:40:56 AM3/12/09
to
I.p.v. het uitschakelen van Gebeurtenissen Toestaan, wat toch tot problemen zou
kunnen leiden (m.n. bij een fout in de procedure voordat EnableEvent=True wordt
bereikt), kun je in dit geval ook dit doen:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 3 And Target <> UCase(Target) Then


Target.Value = StrConv(Target.Value, vbUpperCase)
End If
End Sub

De gebeurtenis wordt dan nog maximaal één keer extra aangeroepen.
Immers de eerste keer wordt tekst waarin kleine letters voorkomen, omgezet naar
hoofdletters, de tweede keer wordt die actie overgeslagen omdat er geen kleine
letters meer zijn.

Jan

"Wigi" <Wi...@discussions.microsoft.com> schreef in bericht
news:F5BFD0C8-1035-43D4...@microsoft.com...

Belinda

unread,
Mar 12, 2009, 5:39:44 AM3/12/09
to
Allemaal hartelijk bedankt voor deze discussie, het duizelt mij en ik denk
dat ik maar gewoon goed moet opletten wat ik invoer.
Ik ben maar een simpele "gebruikster" van Excel
Belinda

"jan" <j...@releerf.nl> schreef in bericht
news:O$GZB5uoJ...@TK2MSFTNGP03.phx.gbl...

]-[oRus

unread,
Mar 12, 2009, 6:04:48 AM3/12/09
to
Belinda vertrouwde ons het volgende toe:

Als 'beginner' stel je anders wel 'gevorderde' vragen. Dus krijg je
ook 'gevorderde' antwoorden...
Maar de toepassing valt wel mee hoor.
Klik rechts op je bladtab en kies programmacode weergeven. Plak in het
geopende venster de gegeven code en pas het kolomnummer aan aan de
juiste kolom.
Dan zou het al moeten werken.....

ikvind...@gmail.com

unread,
Oct 30, 2013, 7:38:02 AM10/30/13
to
Op woensdag 11 maart 2009 20:11:27 UTC+1 schreef Wigi:
Eerste keer VBA voor mij: I like it!
Onderstaande code werkt bij mij totdat er gegevens gedelete worden:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Or 4 Or 6 Or 7 And Target <> UCase(Target) Then
Target.Value = StrConv(Target.Value, vbUpperCase)
End If
End Sub

Kent iemand de oplossing?
tnx!!!!

tammingaf...@gmail.com

unread,
Jan 6, 2014, 12:08:36 PM1/6/14
to
Op woensdag 11 maart 2009 16:06:00 UTC+1 schreef Belinda:
ja
0 new messages