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

prima lettera maiuscolo

140 views
Skip to first unread message

carlo861

unread,
Jun 1, 2008, 3:28:00 AM6/1/08
to
Private Sub TextBox3_AfterUpdate()
With Me.TextBox3
.Value = UCase(.Value)
End With
End Sub

Ciao a tutti,
con questo codice tutto diventa maiuscolo ma se volessi che solo la prima
lettera sia maiuscolo cosa devo cambiare?

cucchiaino

unread,
Jun 1, 2008, 3:48:05 AM6/1/08
to
carlo861 scrive:

-----------------

ciao carlo,
prova a dare un'occhiata alle funzioni:

Left$(stringa, ncaratteri)
Right$(stringa, ncaratteri)
Len(stringa)
Lcase(stringa)


()---cucchiaino

carlo861

unread,
Jun 1, 2008, 10:00:01 AM6/1/08
to
Ciao cucchiaino,
ci sto provando ma non riesco a tirar fuori niente di buono.

"cucchiaino" ha scritto:

carlo861

unread,
Jun 1, 2008, 10:28:01 AM6/1/08
to
Ciao cucchiaino,
Ho provato con questa routine
Private Sub TextBox3_AfterUpdate()
L1 = Mid(TextBox3, 1, 1)
L2 = Mid(TextBox3, 2)
L1 = UCase(L1)
TextBox3 = L1 & L2
End Sub

funziona solo se scrivo tutto minuscolo ma se scrivo tutto maiuscolo mi
rimane tutto maiuscolo.

Norman Jones

unread,
Jun 1, 2008, 11:30:41 AM6/1/08
to
Ciao Carlo,

============


> prova a dare un'occhiata alle funzioni:
>
> Left$(stringa, ncaratteri)
> Right$(stringa, ncaratteri)
> Len(stringa)
> Lcase(stringa)

Ho provato con questa routine


Private Sub TextBox3_AfterUpdate()
L1 = Mid(TextBox3, 1, 1)
L2 = Mid(TextBox3, 2)
L1 = UCase(L1)
TextBox3 = L1 & L2
End Sub

funziona solo se scrivo tutto minuscolo ma se scrivo tutto maiuscolo mi
rimane tutto maiuscolo.

============

Cucchiaino ti ha gia' suggerito le
funzioni da utilizzare.

Un modo di utilizzarle sarebbe:

'===========>>
Private Sub TextBox3AfterUpdate()
Dim sStr As String
Dim aStr As String

With Me.TextBox1
sStr = LCase(Mid(.Text, 2))
sStr = UCase(Left(.Text, 1)) & sStr
.Text = sStr
MsgBox .Text
End With
End Sub
'<<===========


---
Regards.
Norman

Pippo

unread,
Jun 1, 2008, 12:45:29 PM6/1/08
to
carlo861 ha usato la sua tastiera per scrivere :

> Private Sub TextBox3_AfterUpdate()
> With Me.TextBox3
> .Value = UCase(.Value)
> End With
> End Sub
>

> con questo codice tutto diventa maiuscolo ma se volessi che solo la prima

> lettera sia maiuscolo cosa devo cambiare?

Oltre i suggerimenti che ti hanno dato, potresti anche considerare il
caso in cui sei interessato ad ottenere la *prima* lettera *maiuscola*
di *ogni* parola:

es. mario rossi ==> Mario Rossi

es. dott. pippo franco =>> Dott. Pippo Franco

Per i suddetti casi, prova la funzione:

Application.WorksheetFunction.Proper(....)

--
Ciao a tutti
Pippo


Pippo

unread,
Jun 1, 2008, 1:05:45 PM6/1/08
to
Scriveva Pippo domenica, 01/06/2008:

Da utilizzare anche nel caso in cui alcune lettere sono gia' in
maiuscolo:

es. DOTT. pippo FrANCO ==> Dott. Pippo Franco

es. pIpPO => Pippo

es. PIPPO => Pippo

La suddetta funzione, equivale, in Excel, alla funzione:

=MAIUSC.INIZ()

Norman Jones

unread,
Jun 1, 2008, 1:32:26 PM6/1/08
to
Ciao Pippo,

=============

Oltre i suggerimenti che ti hanno dato, potresti anche considerare il
caso in cui sei interessato ad ottenere la *prima* lettera *maiuscola*
di *ogni* parola:

es. mario rossi ==> Mario Rossi

es. dott. pippo franco =>> Dott. Pippo Franco

Per i suddetti casi, prova la funzione:

Application.WorksheetFunction.Proper(....)

Da utilizzare anche nel caso in cui alcune lettere sono gia' in
maiuscolo:

es. DOTT. pippo FrANCO ==> Dott. Pippo Franco

es. pIpPO => Pippo

es. PIPPO => Pippo

La suddetta funzione, equivale, in Excel, alla funzione:

=MAIUSC.INIZ()
=============

In tal caso, credo meglio sia:

'===========>>
Private Sub TextBox1_AfterUpdate()
Dim sStr As String

With Me.TextBox1
.Text = StrConv(.Text, vbProperCase)

Pippo

unread,
Jun 1, 2008, 2:39:49 PM6/1/08
to
Sembra che Norman Jones abbia detto :

OK,...cioe', vuoi dirmi che, non devo usare le funzioni excel da VB!..
;-))..debbo ancora completare la lettura di quel thread, dove, non sono
intervenuto, in quanto c'era uno scontro tra "titani": Maurizio &
Norman.. :-))

http://tinyurl.com/65px3t

Come mai, pero', nel seguente thread, hai usato la funzione
Application.WorksheetFunction.Proper(....)? :D)

http://tinyurl.com/5a4bt9

Grazie milleeeee

Norman Jones

unread,
Jun 1, 2008, 4:21:13 PM6/1/08
to
Ciao Pippo,

In genere, se esiste una funzione VBA,
sarebbe preferibile e piu' efficiente
utilizzarla anziche' una funzione di Excel;

Ci sono, pero', casi dove esistono delle
funzioni in Excel e VB(A) le quale sono
molto simile ma ma sottilemente differenti;
ci sono anche delle funzioni che sono
superficialmemente similila ma che hanno
una differenza significanti: degli esempi di
queste ultime funzioni sono IsNumeric di
VB(A) e Is Number di Excel e le
versioni di Trim e Round.

Ci sono poi delle funzioni che io utilizzo
perche' sono molto utili e concise: ad
esempio VLookup e Match (Cerca.Vert
e Confronta)

Utilizzo questa ultima categoria spesso,
particolarmente nelle risposte del NG;
per il mio proprio codice, ho sviluppato
delle routine che utilizzo invece di Match
e VLookup ma queste routine sono
abbastanza lunghe.

Tornando, allora, all'uso della funzione
Proper, direi che questo esempio e da
due anni fa, ed era scritto a quasi
mezzanotte! Inoltre, se rispondessi alla
stessa domanda diverse volte, e' molto
possibile che posti delle soluzioni diverse.

Ci sono poi le considerazioni di gusto e
di punto di vista: non penso oggi nello
stesso modo che pensavo alcuni ani fa.

Al questo riguardo, noterai che ho utilizzato
la sintasssi:

Application.WorksheetFunction....

Ora, e' molto più probabile che non userei
la proprieta' WorksheetFunction; ad esempio,
ora utilizzerei Application.Match e *mai*
Application.WorksheetFunction.Match.

Detto tutto questo, preferirei non utilizzare
la funzione Proper, e se vorresti fare una
critica del mio uso di questa funzione a quel
tempo, avresti ragione e concorderei con te!

C'e' un detto inglese:

Do as I say, not as I do! :-))

---
Regards.
Norman

Pippo

unread,
Jun 1, 2008, 5:29:05 PM6/1/08
to
Dopo dura riflessione, Norman Jones ha scritto :

[cut]

> Ora, e' molto più probabile che non userei
> la proprieta' WorksheetFunction; ad esempio,
> ora utilizzerei Application.Match e *mai*
> Application.WorksheetFunction.Match.

Scusa Norman, tra

Application.Match

e

Application.WorksheetFunction.Match

quali sono le differenze?

Se scrivo "Application.", il relativo elenco a discesa, NON mi propone
"Match"...

Grazie milleeee

Maurizio Borrelli

unread,
Jun 1, 2008, 6:33:17 PM6/1/08
to
"carlo861" wrote in message
news:B1A41DDC-91BF-4101...@microsoft.com:

> Private Sub TextBox3_AfterUpdate()
> With Me.TextBox3
> .Value = UCase(.Value)
> End With
> End Sub

> con questo codice tutto diventa maiuscolo ma se volessi che solo la prima
> lettera sia maiuscolo cosa devo cambiare?

Ciao carlo861.

Un modo:

Dim s As String

With Me.TextBox3
s = .Value
s = UCase$(Left$(s, 1)) & LCase$(Mid$(s, 2))
.Value = s
End With

Curiosita`: perche' usi proprio l'evento "AfterUpdate"? Che scopo ti
proponi?

(Facci sapere se e eventualmente come hai risolto. Grazie!)

--
Maurizio Borrelli [Microsoft MVP Office System]
http://www.riolab.org/


Norman Jones

unread,
Jun 1, 2008, 7:06:19 PM6/1/08
to
Ciao Pippo.

=============
Scusa Norman, tra

Application.Match

e

Application.WorksheetFunction.Match

quali sono le differenze?

Se scrivo "Application.", il relativo elenco a discesa, NON mi propone
"Match"...

=============

Prova le seguente due routine; l'unica
differenza tra le routine e' l'uso di:

Application.Match

nella prima e di:

Application.WorksheetFunction.Match

nella seconda.

Prova le routine e vedi il comportamento diverso,


'============>>
Option Explicit
'-------------->>
Public Sub Tester1()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim Res
Dim i As Long
Dim arr As Variant
Const sStr As String = "Pippo"

Set WB = ThisWorkbook
Set SH = WB.Sheets("Foglio1")
Set Rng = SH.Range("A1:A10")

arr = VBA.Array("Anne", "Ben", "Carol", "David", _
"Ewan", "Fred", "Gerald", _
"Harry", "Ian", "PIPPO")

Rng.Value = Application.Transpose(arr)
Rng.Cells(10).Value = "PLUTO"

For i = LBound(arr) To UBound(arr)
Res = Application.Match(arr(i), Rng, 0)
If Not IsError(Res) Then
'\\ fai qualcosa, ad esempio
MsgBox arr(i) & vbTab & Res
End If
Next i

End Sub

'-------------->>
Public Sub Tester2()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim Res
Dim i As Long
Dim arr As Variant
Const sStr As String = "Pippo"

Set WB = ThisWorkbook
Set SH = WB.Sheets("Foglio1")
Set Rng = SH.Range("A1:A10")

arr = VBA.Array("Anne", "Ben", "Carol", "David", _
"Ewan", "Fred", "Gerald", _
"Harry", "Ian", "PIPPO")

Rng.Value = Application.Transpose(arr)
Rng.Cells(10).Value = "PLUTO"

For i = LBound(arr) To UBound(arr)
Res = Application. _
WorksheetFunction.Match(arr(i), Rng, 0)
If Not IsError(Res) Then
'\\ fai qualcosa, ad esempio
MsgBox arr(i) & vbTab & Res
End If
Next i

End Sub
'<<============

---
Regards.
Norman

Pippo

unread,
Jun 1, 2008, 8:13:50 PM6/1/08
to
Il 02/06/2008, Norman Jones ha detto :


Nella prima routine "Tester1()", quando NON viene trovato "PIPPO" in
rng, la funzione:


Res = Application.Match(arr(i), Rng, 0)


NON genera errore di run-time, *anzi*, l'errore e' *intercettato* dalla
funzione "IsError()" !!!


Nella seconda routine, "Tester2()", quando NON viene trovato "PIPPO" in
rng, la funzione:

Res = Application.WorksheetFunction.Match(arr(i), Rng, 0)

GENERA un errore di run-time, che NON viene intercettato. :-((

..continuo pero' ad avere i miei dubbi..

..se nel "Visualizzatore oggetti" ricerco "Match", ottengo:

''''''''''''''''''''''''

Libreria:Excel

Classe:Worksheetfunction

Membro:Match

''''''''''''''''''''''''

Quindi "Match" appartiene alla classe *Worksheetfunction* e NON ad
"Application".

Mi dai qualche ulteriore spiegazione? ;-))

Norman Jones

unread,
Jun 1, 2008, 8:26:55 PM6/1/08
to
Ciao Pippo,

=============
[...]


Mi dai qualche ulteriore spiegazione? ;-))

=============


Si, domani!

Ora, crollo!

---
Regards.
Norman

Pippo

unread,
Jun 1, 2008, 8:40:01 PM6/1/08
to
Dopo dura riflessione, Pippo ha scritto :


Inoltre, quando applichi la seguente trasposizione del vettore arr(),
NON capisco, perche', si perde l'ultimo elemento("PIPPO"):


Rng.Value = Application.Transpose(arr)


...anche la suddetta istruzione ho provato a scriverla nella forma:


Rng.Value = Application.Worksheetfunction.Transpose(arr)


ma NON ho notato differenze.....


Grazie milleeeee

Pippo

unread,
Jun 1, 2008, 8:59:08 PM6/1/08
to
Nel suo scritto precedente, Pippo ha sostenuto :


OK, ..scusami(il sonno incomincia a farsi sentire), leggendo con piu'
attenzione, mi sono accorto che l'ultimo elemento "PIPPO", viene
sovrascritto dall'istruzione di assegnazione:

Rng.Cells(10).Value = "PLUTO"

...quindi, adesso e' chiaro!


Confermo pero', le seguenti osservazioni:

> ...anche la suddetta istruzione ho provato a scriverla nella forma:
>
>
> Rng.Value = Application.Worksheetfunction.Transpose(arr)
>
>
> ma NON ho notato differenze.....

Sto avendo anche io un *crollo*.... ;-)))

Norman Jones

unread,
Jun 2, 2008, 6:53:23 PM6/2/08
to
Ciao Pippo,

=============
[...]
Leggete il thread!


[...]
Mi dai qualche ulteriore spiegazione? ;-))
=============

Con l'introduzione di xl97, Microsoft ha
colto l'opportunità creare l'oggetto
WorksheetFunction, che agisce come un
contenitore per le funzioni di Excel
disponibili in VBA.

Per la maggior parte di queste funzioni,
questa era semplicemente una modifica del
modello di oggetto.

Purtroppo, per dei motivi a me
incomprensibile, per il sotto-gruppo di
funzioni (come, ad esempio, Cerca.Verte
e Confronta) che restituiscono l'errore #N/A ,
Microsoft non ha preveduto un valore
analogo in VBA.

Di conseguenza, quando luna tale funzione
non può restituire un valore, si incontra
l'errore run-time 1004.

Quindi, per superare questo problema
insensato, preferisco evitare l'uso della
proprietà WorksheetFunction; ciò mi
permette di testare un valore valido con la
funzione IsError.

Tu hai ragione che, per sfruttate lo
strumento 'intellisense', è necessario usare
la proprietà WorksheetFunction;
normalmente non ne ho bisogno ma, se mi
fosse utile, posso sempre utilizzare la
proprietà - ed poi cancellarla!

---
Regards.
Norman

Pippo

unread,
Jun 2, 2008, 7:40:37 PM6/2/08
to
Norman Jones ci ha detto :

[cut]

> Tu hai ragione che, per sfruttate lo
> strumento 'intellisense', è necessario usare
> la proprietà WorksheetFunction;
> normalmente non ne ho bisogno ma, se mi
> fosse utile, posso sempre utilizzare la
> proprietà - ed poi cancellarla!

Certo, se pero' si e' a conoscenza del problema! ;-))

Grazie milleeeeee

0 new messages