Mayúsculas, minúsculas y palabras compuesta o con separadores en Access
Tengo una pequeña base de datos de uso personal y encontré este código realizado por Jacinto Trillo que cumple a la perfección con lo que deseo ( poner la primera letra en mayúscula de cada palabra y las demás en minúsculas respetando determinadas reglas ortográficas), pero me surge un pequeño problemilla y es que si escribo algo así PLÁSTICO/ACERO me gustaría que me devolviese Plástico/Acero y no Plástico/acero, los separadores podrían ser "/" ó "-". Obviamente podría modificar el separador para que dejase un espacio después (Texto = Replace(Texto, "/", "/ ")pero quedaría un poco chapuza
El código
Option Compare Database
Public Function PrimeraLetraMayuscula(ByVal Texto As String) As String
'Pone en Mayúscula la Primera letra de cada palabra en un Texto, teniendo en cuenta caracteres especiales
Dim Cadenas() As String
Dim BytCaracter As Byte
Dim I As Long, K As Long
Dim Alerta As Boolean
Dim NumPalabra As Integer
Dim StrPalabra As String, FinPalabra As String
NumPalabra = 0
Cadenas = Split(Texto)
For I = 0 To UBound(Cadenas)
StrPalabra = Cadenas(I)
StrPalabra = LCase(StrPalabra)
'Cada vez sumo uno, para aprovecharlo en el Próximo >> If NumPalabra..........
NumPalabra = NumPalabra + 1
For K = 1 To Len(StrPalabra)
'Si el Numero de la Palabra es mayor que la Primera
If NumPalabra > 1 Then
If Alerta = True Then
'No hacemos nada
Else
'Si tiene uno de los Textos citados, salta sin hacer nada
Select Case StrPalabra
'En ésta líne se pueden añadir otras palabras y quedarán excluidas de la conversión
Case "de", "del", "el", "la", "las", "lo", "los", "o", "que", "y"
Exit For
End Select
End If
End If
BytCaracter = Asc(Mid(StrPalabra, K, 1))
Select Case BytCaracter
'Si el carácter es una letra en minúscula
Case 97 To 122, 154, 156, 158, 224 To 246, 249 To 255
StrPalabra = Left(StrPalabra, K - 1) & UCase(Chr$(BytCaracter)) & LCase(Mid(StrPalabra, K + 1))
Alerta = False
Exit For
End Select
Next K
Cadenas(I) = StrPalabra
FinPalabra = Right(StrPalabra, 1)
'En ésta línea se pueden añadir otros Caracteres de Alerta
If (FinPalabra = "." Or FinPalabra = ":" Or FinPalabra = "!" Or FinPalabra = "?" Or FinPalabra = "/") Then
Alerta = True
End If
Next I
PrimeraLetraMayuscula = Join(Cadenas)
End Function 'PrimeraLetraMayuscula(ByVal Texto As String) As String
Llamaremos al modulo como queramos, por ejemplo Primera_Mayuscula, y después tendremos que llamar la función desde el cuadro de texto en la que queramos que se ejecute por ejemplo si el cuadro de texto se llamase “Color” pondríamos en el evento “Despues de Actualizar” el siguiente código
Private Sub Color_AfterUpdate()
Me.Color = PrimeraLetraMayuscula(Me.Color)
End Sub