En Access estoy intentando que al escribir en un campo texto me ponga la primera en mayúsculas y el resto en minúsculas

En Access estoy intentando que al escribir en un campo me ponga sólo la primera letra de la primera palabra en mayúsculas y el resto en minúsculas. Así como que después de un signo de puntuación la primera palabra tenga la primera letra en mayúsculas.

He probado este código que subiste a otro usuario pero no se como modificarlo para lo que quiero, ya que con lo que hace es poner en mayúsculas la primera letra de cada palabra y no sólo necesito que sea la primera.

Por ejemplo, que las siguientes cadenas de texto "cantidad total de producto. Facturable", "CANTIDAD TOTAL DE PRODUCTO. FACTURABLE" o "CANTIDAD total de PRODUCTO. Facturable" o escrito de cualquier otra manera al final quede como "Cantidad total de producto. Facturable"

El código que compartiste es:

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 = "?") Then
Alerta = True
End If
Next I

PrimeraLetraMayuscula = Join(Cadenas)

End Function 'PrimeraLetraMayuscula(ByVal Texto As String) As String

Respuesta
2

Dime por favor los antecedentes de esa pregunta, porque se puede dar el caso de que la corrigiera en algo, a través de algún email del usuario.

Simplemente puedes copiar aquí el link.

Un saludo >> Jacinto

En mi caso no quiero que la primera letra de cada palabra sea mayúscula sino sólo que lo sea la primera letra del inicio de cada oración. El texto se introduce siempre en mayúsculas, pero luego necesitamos utilizar este texto en un informe donde queremos que aparezca en minúsculas pero respetando las reglas de ortografía, con la primera letra de la primera palabra en mayúsculas. No se si me explico.

Pablo:He mirado el código y en principio cumple las reglas para las que está escrito que por lo que veo no es tu caso. Si solo fuera una frase corta sin puntos >>

Para convertir "solo" la primera letra de una oración en mayúscula basta con hacer.

Me.TextoUno = StrConv(Me.TextoUno, vbProperCase)

Pero según me cuentas, el Texto ya estará guardado en una Tabla con todas las letras en Mayúsculas.

Si eso es así, la función que facilité, se ha de adaptar. Justo hoy no podré hacerlo, pero cuando tenga un momento lo miro y te comento. Si entre tanto en tu Base de Datos, no tienes datos personales o confidenciales, puedes enviármela a [email protected]

En caso de tenerlos, puedes inventar unos cuantos y mandarme los Objetos que intervengan en el proceso, o sea Tabla, Formulario, Informe etc. Espero me comentes. Mis saludos>> Jacinto

He probado este otro código. Me pone la primera en mayúsculas, pero después de un ".", "!", "?",... sigue con minúsculas. No se como integrar que vuelva a poner la primera letra en mayúsculas después del signo de puntuación.

Sub Campo_AfterUpdate() ' Cambia el contenido a primera letra mayúscula al salir del campo 

Dim CadenA as String
CadenA = Lcase ([Campo] )
Mid (CadenA, 1, 1 ) = Ucase (Left (CadenA, 1 ) )
[Campo] = CadenA
End Sub

En realidad no me importaría que se guardase el texto ya con el formato que necesito para el informe. Ademas esto que estoy intentando me valdrá para las nuevas entradas que se vayan creando, así que los registros existentes con todo en mayúsculas no me afectan.

Al final lo que necesito es que para los nuevos registros que se vayan creando el campo "Descripcion" se guarde con el texto "corregido". Si el texto se escribe en mayúsculas o por despiste se escribe en minúsculas la primera letra de una oración, ya sea inicial o después de un signo de puntuación, ásta se "auto-corrija".

Pablo: Miro de adaptar la función y te comento. Un saludo >> Jacinto

Perfecto, quedo a la espera. Muchas gracias

Pablo: En la línea de tu petición he adaptado la Función para que ponga la primera letra de cada frase completa en Mayúscula y el resto en minúsculas. Ni por asomo es un corrector gramatical, porque entre otras cosas no distingue >> el buen o mal "gobierno" de un "Pueblo", por parte de su "Gobierno". Pero > Esto lo traduciría>> El buen o mal gobierno de un pueblo, por parte de su gobierno. Pero.. Y no pondrá Viernes Santo sino viernes santo.

En otras palabras, no estariamos respetando las >> Reglas ortográficas para el uso e las mayúsculas de modo correcto.

Public Function CorreccionBasica(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
'Si el texto es Nulo o su longitud es Cero
If IsNull(Texto) Or Len(Trim(Texto)) = 0 Then
   Exit Function
End If
Ponemos un espacio despues de >> "." o ":" o "!" o "?"
Texto = Replace(Texto, ".", ". ")
Texto = Replace(Texto, ":", ": ")
Texto = Replace(Texto, "!", "! ")
Texto = Replace(Texto, "?", "? ")
'Si es que con eso hemos provocado dos espacios, le quitamos uno
Texto = Replace(Texto, "  ", " ")
NumPalabra = 0
Cadenas = Split(Texto) 'Dividimos la Cadena de Texto inicial en SubCadenas >> StrPalabra
For I = 0 To UBound(Cadenas)
    StrPalabra = Cadenas(I)
    StrPalabra = LCase(StrPalabra) 'La convierto toda a Minúsculas
    'Cada vez sumo uno, para aprovecharlo en el Próximo >> If NumPalabra..........
     NumPalabra = NumPalabra + 1        
     For K = 1 To Len(StrPalabra)
          BytCaracter = Asc(Mid(StrPalabra, K, 1)) ' Extraigo el primer carácter de la Palabra
          Select Case BytCaracter
               'Si el carácter es una letra en minúscula.
               'Solo Recodatorio >> Mayúsculas son: 65 To 90,192 To 197,199 To 221. Numeros son ; 48 To 57
               Case 97 To 122, 154, 156, 158, 224 To 246, 249 To 255 'Estas son las minúsculas
                     If NumPalabra = 1 Or Alerta = True Then 'Si es Primera palabra o la anterior termina en "." o ":" o "!" o "?"
                          StrPalabra = Left(StrPalabra, K - 1) & UCase(Chr$(BytCaracter)) & LCase(Mid(StrPalabra, K + 1))
                     Else
                          StrPalabra = Left(StrPalabra, K - 1) & LCase(Chr$(BytCaracter)) & LCase(Mid(StrPalabra, K + 1))
                     End If
                     Alerta = False 'Si pasa por aquí pone la Alerta A False  >> Ha puesto la Primera letra a Mayúscula
                     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 = "?") Then
           Alerta = True
       End If
Next I
CorreccionBasica = Join(Cadenas)
End Function   'CorreccionBasica(ByVal Texto As String) As String

Para llamar a ésta función lo has de hacer desde el AfterUpdate (Después de actualizar), o al perder el Foco del TextBox en el que estás escribiendo.

De éste modo

Private Sub TxtCorreccionBasica_AfterUpdate()
Me.TxtCorreccionBasica = CorreccionBasica(Me.TxtCorreccionBasica)
End Sub

Estoy suponiendo que el TextBox se llama TxtCorreccionBasica. Saludos >> Jacinto

¡Gracias! Con eso me vale perfectamente. Cierto que no es un corrector ortográfico pero es justo lo que andaba buscando, una "correción" para respetar el inicio de las oraciones.

Muchas gracias por tu ayuda y por tu tiempo. Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas