Ciao a tutti,
con questo codice tutto diventa maiuscolo ma se volessi che solo la prima
lettera sia maiuscolo cosa devo cambiare?
-----------------
ciao carlo,
prova a dare un'occhiata alle funzioni:
Left$(stringa, ncaratteri)
Right$(stringa, ncaratteri)
Len(stringa)
Lcase(stringa)
()---cucchiaino
"cucchiaino" ha scritto:
funziona solo se scrivo tutto minuscolo ma se scrivo tutto maiuscolo mi
rimane tutto maiuscolo.
============
> 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
> 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
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()
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)
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.. :-))
Come mai, pero', nel seguente thread, hai usato la funzione
Application.WorksheetFunction.Proper(....)? :D)
Grazie milleeeee
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
[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
> 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/
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
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? ;-))
=============
[...]
Mi dai qualche ulteriore spiegazione? ;-))
=============
Si, domani!
Ora, crollo!
---
Regards.
Norman
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
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*.... ;-)))
=============
[...]
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
[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