Excel-ul are funcţia predefinită Proper, care oferă posibilitatea de a afişa doar prima literă a unui cuvânt cu majuscule; evident, dacă acel câmp conţine mai mult de un cuvânt, ele vor fi scrise toate cu prima literă majusculă; chiar dacă acele cuvinte sunt despărţite cu cratimă (după cum este deseori cazul numelor/prenumelor compuse).
Access-ul are o funcţie oarecum asemănătoare: StrConv; spun oarecum „asemănătoare” pentru că:
- are un argument în plus – al doilea – cifra 3 (dacă se foloseşte cifra 1 ar converti totul la majuscule – echivalentul lui UCase, iar 2 ar converti totul la litere mici – echivalentul lui LCase)
- în cazul în care vorbim de câmpuri care conţin cuvinte compuse, cu cratimă sau care încep cu cifre, al doilea cuvânt nu va fi scris cu majuscule.
O variantă rapidă poate fi prin combinaţii de funcţii: Left, Right, InStr, fie folosind direct SQL-ul, fie integrate într-o funcţie VBA, astfel încât să poată fi utilizată uşor oricând este nevoie în acea aplicaţie.
1 2 3 4 5 6 7 8 9 |
Public Function fc_PrimaLit(expr) Select Case True Case InStr([expr], "-") > 0 fc_PrimaLit = StrConv(Left([expr], InStr([expr], "-") - 1), 3) & "-" & _ StrConv(Right([expr], Len([expr]) - InStr([expr], "-")), 3) Case Else fc_PrimaLit = StrConv(expr, 3) End Select End Function |
Un dezavantaj ar fi pentru cazul în care ar fi cel puţin trei cuvinte unite prin cratimă, că va fi doar prima apariţie scrisă cu prima literă majusculă.
Ceva mai profund poate fi următoarea funcţie exemplificată pe site-ul Microsoft:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Function Proper(expr) ' Scrie toate cuvintele avand prima litera majuscula. ' Poate fi utilizat in AfterUpdate of control; de ex., [Pren] = Proper([Pren]). Dim txt_0, txt_1, txt_2, nr As Integer If IsNull(expr) Then Exit Function Else txt_0 = CStr(LCase(expr)) txt_2 = " " ' Initializarea txt_2 la un singur spatiu, deoarece prima litera ' trebuie sa fie cu majuscula, dar sa nu aiba litera precedenta. For nr = 1 To Len(txt_0) txt_1 = Mid(txt_0, nr, 1) If txt_1 >= "a" And txt_1 <= "z" And _ (txt_2 < "a" Or txt_2 > "z") Then Mid(txt_0, nr, 1) = UCase(txt_1) End If txt_2 = txt_1 Next nr Proper = txt_0 End If End Function |