Usar función de un módulo en campo de formulario

He encontrado una función para convertir una cadena de texto al formato de nombre propio, es decir la primera letra con mayúsculas y el resto en minúsculas, pero no sé cómo integrarla en un evento, en un campo concreto de mi formulario.

Mi bd se llama Biblioteca_Personal

El formulario "Libros"

Y el campo donde insertar la función es "titulo"

La función para convertir los datos al formato de nombre propio es:

Public Function NombrePropio(ByVal Texto As String) as String
Dim Cadenas() As String
Dim i As Long
Dim strPalabra As String

Cadenas = Split(Texto)
For i = 0 To UBound(Cadenas)
strPalabra = Cadenas(i)
strPalabra = UCase(Left(strPalabra, 1)) _
& LCase(Mid(strPalabra, 2))
If i > 0 Then
If Len(strPalabra) < 3 Then
strPalabra = LCase(strPalabra)
Else
Select Case strPalabra
Case "Del", "Las", "Los", "Con"
strPalabra = LCase(strPalabra)
End Select
End If
End If
Cadenas(i) = strPalabra
Next i
NombrePropio = Join(Cadenas)
End Function

¿Cómo podría usarla en el campo "titulo" de mi formulario "biblioteca_Personal, es decir cuál sería el códig vba exacto adaptado a este campo "titulo?

1 Respuesta

Respuesta
1

Lo único que tienes que hacer es poner, en el evento "Después de actualizar" de tu campo titulo, el siguiente código:

Private Sub titulo_AfterUpdate()

Me.titulo=NombrePropio(Me.titulo)

End Sub

Ha funcionado perfectamente. Muchas gracias.

Se me ocurre si no es mucho pedir ... en el caso de que quisiera usar la función para  varios campos del formulario, cómo podría usarla, sin tener que insertar el código que me dices en cada uno de ellos.

Se me ocurre si algo así.

En un evento del propio formulario como "al abrir" introducir esto:

Private Sub Form_Open(Cancel As Integer)

Me.titulo=NombrePropio(Me.titulo)

Me.genero=NombrePropio(Me.genero)

Me.autor=NombrePropio(Me.autor)

Me.categoria=NombrePropio(Me.categoria)

end sub

¿qué te parece, sería adecuado así, con el evento "al abrir" o "al cargar" del formulario?

Con esto daría por finalizada la pregunta si fuera tan amable de indicarme, gracias

Los eventos "al abrir" o "al cargar" no son los más adecuados, pues sólo te funcionarían para el primer registro que se cargue, con lo que no conseguirías lo que pretendes.

Tendrías que ponerlo en algún evento que se ejecute despues de editar los datos, no antes.

Prueba con los eventos "antes de actualizar", "después de insertar","al cambiar los datos", a ver si alguno se ajusta a lo que quieres.

De todas formas, poner todos los controles en el mismo evento no implica ninguna ventaja sobre poner cada uno en su control, al menos que yo vea, ni te evita tener que escribir la función para cada cuadro de texto.

Lo que pasa Sveinbjorn El Rojo es que como tengo datos ya insertados en formato minúsculas veo que si uso "antes de actualizar", "después de actualizar", etc...

En ninguno me cambia el formato a Nombre Propio (primera letra mayúsculas y resto minúsculas) si los datos ya están introducidos y entonces no sé cómo pasarlos a nombre propio los ya introducidos.

Tu respuesta solo me soluciona los que voy en adelante a insertar pero no los ya introducidos.

Si pudieras ayudarme con esto te lo agradecería mucho.

En ese caso ponlo en el evento "Al activar registro" del formulario, pero tendrás que ir pasando de uno en uno por todos los registros.

Otra opción, más sencilla, creo, es que te crees una consulta de actualización sobre la tabla, y en la fila "Actualizar a" le pones en cada campo:

NombrePropio([titulo])

NombrePropio([genero])

Y así con todos los que quieras poner con ese formato. De este modo te actualizará los datos de toda la tabla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas