Access - Función para controlar la longitud de un campo

 
Vista:

Función para controlar la longitud de un campo

Publicado por Eder Monterroza (3 intervenciones) el 09/11/2020 17:27:28
Señores buenos días, mi pregunta es la siguiente: Tengo un formulario independiente llamado FrmDatos, con los siguientes campos: TxtCedula(Texto), TxtNombres(Texto), TxtApellidos(Texto), TxtDireccion(Texto) Etc. Para controlar la longitud en el campo que el usuario esta digitando uso el siguiente codigo en el evento al cambiar o change.
1
2
3
4
5
6
7
8
9
Private Sub TxtNombres_Change()
    Rem código para controlar la longitud del campo
    If Len(Me.TxtNombres.Text) > 35 Then
        MsgBox "Longitud máxima permitida, 35 caracteres", vbInformation, "Longitud no valida"
        Me.TxtNombres.Text = Mid(Me.TxtNombres.Text, 1, Len(Me.TxtNombres.Text) - 1)
        Me.TxtNombres.SelStart = 35
        Exit Sub
    End If
End Sub
Esto funciona de maravilla, apenas el usuario llega al límite automáticamente se dispara el mensaje. Lo que quiero es una función que haga exactamente lo mismo que el código anterior, donde pase como parámetro el nombre del textbox y la longitud, ahora si hay forma de hacerla pasandole únicamente la longitud, sería espectacular.

La condición es que funcione en el evento change, ya que tengo una que funciona en el evento al salir (exit), pero esta deja que el usuario digite los caracteres que quiera y controla es cuando presionamos enter o hacemos click en otro campo, la idea es controlar al momento de ir digitando los caracteres.

De antemano le doy mil millones de gracias a quien me pueda ayudar.

Eder Monterroza
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Función para controlar la longitud de un campo

Publicado por Anonimo (3316 intervenciones) el 09/11/2020 18:28:19
Si se desea utilizar en diversos controles, lo adecuado seria utilizar una función ya sea a nivel local (solo requerirá dos parámetros, objeto y longitud).

Básicamente es lo mismo que lo que se tiene, solo que no estará unido a ningún objeto en concreto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Función para controlar la longitud de un campo

Publicado por Eder Monterroza (3 intervenciones) el 09/11/2020 18:47:35
Por favor serias tan amable darme una iniciativa de como quedaría. te lo agradezco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Función para controlar la longitud de un campo

Publicado por Eder Monterroza (3 intervenciones) el 09/11/2020 19:09:22
esta es la función que tengo, pero en realidad no funciona como yo quiero
1
2
3
4
5
6
7
8
9
10
Function limitext(mvalor As Byte)
    ' limita el número de caractres de un control texto
    ' de acuerdo con e parametro mvalor
    Dim ctlCurrentControl As Control
    Set ctlCurrentControl = Screen.ActiveControl
    If Len(ctlCurrentControl) > mvalor Then
        ctlCurrentControl = Left(ctlCurrentControl, mvalor)
        Screen.ActiveControl.SelStart = mvalor
    End If
End Function
Cuando la llamo en el evento Change, el usuario puede digitar el número de caracteres que quiera, no controla para nada, cuando controla, cuando pongo el foco en otro campo y regreso al campo donde está la función, ahy si controla, no he podido con ella por eso pido ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Función para controlar la longitud de un campo

Publicado por Anonimo (3316 intervenciones) el 10/11/2020 00:32:47
Si se utiliza en el evento Change (esto es, cuando se esta modificando en tiempo real el objeto), el valor que se esta manipulando esta en su propiedad TEXT no en VALUE, por ello no interpreta lo que se le solicita.

Un cuadro de texto puede tener varios valores (cada uno en su respectiva propiedad).
XXX.Value = valor por defecto en el control
XXX.OldValue = si no se cambio será el mismo que VALUE, si se cambio el valor anterior, cuando se guarda el registro se igualan ambos
XXX.Text = este valor solo es accesible en tiempo de ejecución y solo existe para el objeto activo, es el valor real que toma según se esta interactuando con el.

No veo que ventaja tiene el crear una variable para definir al objeto activo, la propiedad ActiveControl del objeto SCREEN no va a cambiar (en teoría, que hay programadores que suelen complicar lo sencillo)
Se puede aplicar como opción por defecto con With / End With y después solo se precisa un punto seguido de la propiedad:

1
2
3
4
5
With Screen.ActiveControl
.Height = 400
.Value = "Manolo Garcia"
MsgBox .Text
End With


Si a la función se le añade un parámetro de tipo texto y al llamar a la función se le pasa el contenido de la propiedad TEXT y el limite que se desea aplicar, se dispone de los datos con los que se esta trabajando

Para una función diseñada así:

1
Private Function limitext(mtexto As String, mvalor As Byte)

Se la utilizaria asi:

1
2
3
Private Sub TxtNombres_Change()
limitext (TxtNombres.Text, 35)
.......

Ya que no se le asigna un valor de retorno a la función, se podrá utilizar una subfunción en su lugar (utiliza menos recursos y hace lo mismo), en este caso se usara así:

1
limitext TxtNombres.Text, 35
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar