Label con conteo regresivo según TextBos

Tengo este código

Private Sub TextBox15_Change()
'minusculas
ALTA_CLIENTE.TextBox15.Text = LCase(ALTA_CLIENTE.TextBox15.Text)
'----------------------------
''''''''''' Me.TextBox1.MaxLength = 40
Me.Label20 = 10 - VBA.Len(Me.TextBox15)
If VBA.Len(Me.TextBox15) > 9 Then KeyAscii = 0: MsgBox "LLego al maximo de 10 caracteres": Exit Sub
'Exit Sub
End Sub

NO he logrado que funcione como deseo, la segunda parte, el KeyAscii = 0.

El mensaje y todo lo demás funciona, me hace el conteo regresivo en el Label20 y al entrar el décimo carácter (0 en el label) me manda mensaje TODO BIEN hasta aquí.

Lo que no me hace es NO PERMITIR que se sigan entrando caracteres si insisto en ello.

Quiero que al llegar al décimo carácter en el TextBox, no me permita entrada de alguno más en casi de insistir

1 Respuesta

Respuesta
1

Los Textbox tienen una propiedad llamada: MaxLength, allí le podés indicar el valor máximo que en este caso es 10.

Por lo que no necesitas nada del código que creaste, salvo lo relativo al Lcase:

Private Sub TextBox1_Change()
'minusculas
TextBox15.Text = LCase(TextBox15.Text)
End Sub

PD) Si el textbox corresponde al Userform activo no hace falta que le agregues el nombre sino utiliza la instrucción que tenías:

ALTA_CLIENTE.TextBox15.Text = LCase(ALTA_CLIENTE.TextBox15.Text)

Hola Elsa, gracias por la recomendación y aport

No se si me hice entender en mi solicitud y exposición, creo que no

Si, no necesitaría más SI, no quisiera nada más pero:

No quiero darle la propiedad MaxLength y tampoco en macro, solo ahí donde tu puedes observar.

Eso ya esta pero "repito" quiero que al llegar al 10º carácter mande mensaje (ya lo hace) pero le doy aceptar al mensaje y insisto en meterle caracteres y me lo permite, esto ultimo es lo que no quiero que permita.

¿Llego al 10º? Me manda mensaje, PERFECTO(ya lo hace)

Piso Aceptar (OK) del mensaje y insisto en meterle más caracteres, me manda mensaje, PERFECTO (ya lo hace pero el carácter que insisto en meterle se queda en el cuadro de texto y es precisamente lo que no quiero

Se me paso este detalle

¿Y cómo se hace para tener la cuenta REGRESIVA EN EL lABEL20? ¿Si solo tengo la línea para minúsculas?

Private Sub TextBox1_Change()
'minusculas
TextBox15.Text = LCase(TextBox15.Text)
End Sub

Mi precario conocimiento no me permite saberlo o conocerlo

¿Puedo conocer las razones por las que no quieres asignarle la propiedad MaxLength, considerando que es justamente la que necesitas?

Te dejo algunas opciones para que elijas la que mejor te cuadre:

Opc.1: (La enviada anteriormente con propiedad Max Length en 10 y uso de label)

Private Sub TextBox15_Change()
'minusculas
TextBox15.Text = LCase(TextBox15.Text)
'caracteres restantes en el label
Me.Label20 = 10 - Len(Me.TextBox15)
End Sub

Opc.2: pasar el foco a otro control, imaginemos al textbox16 (puede ser un botón o el control que siga en el orden)

Private Sub TextBox15_Change()
'minusculas
TextBox15.Text = LCase(TextBox15.Text)
'caracteres restantes en el label
Me.Label20 = 10 - Len(Me.TextBox15)
'si se llega a los 10 caracteres
If Len(Me.TextBox15) > 9 Then
    MsgBox "LLego al maximo de 10 caracteres"
    TextBox16.SetFocus     ' pasar el foco a otro control
    TextBox15.MaxLength = 10 'asignarle la prop max length por si intenta volver y seguir ingresando
End If
End Sub

Si inhabilitas la instrucción TextBox15.MaxLength...(colocando una comilla delante) y probas esta macro podras notar que si bien le paso el foco a otro control el usuario puede regresar aquí y seguir agregando datos. Por eso le agrego el límite con la propiedad MaxL.

Opc.3: pasar el foco a otro control e inhabilitar volver a éste:

Private Sub TextBox15_Change()
'minusculas
TextBox15.Text = LCase(TextBox15.Text)
'caracteres restantes en el label
Me.Label20 = 10 - Len(Me.TextBox15)
'si se llega a los 10 caracteres
If Len(Me.TextBox15) > 9 Then
    MsgBox "LLego al maximo de 10 caracteres"
    TextBox16.SetFocus          'pasar el foco a otro control
    TextBox15.TabStop = False  'impedir volver a seleccionar este control
End If
End Sub

Sdos!

Hola Elsa

Myu bien, hace lo pedido, solo un detalle que no se que pueda ser

Hice un copy/pega, lo único que cambie fue

 TextBox16.SetFocus 'pasar el foco a otro control
 TextBox1.SetFocus 'pasar el foco a otro control

ya que no existe en el form el 16, bien, no creo ser ese el detalle porque volví a copy/pega y me da igual;

Al final presenta el mensaje al 10º carácter le doy Aceptar y me repite el mensaje, ¿qué cres que será? Claro que le desactivo el msgbox y no da mensaje ni la repetición, (evidente que no habrá).

Le di propiedad de MaxLength desactivando la del código pero igual sucede

Tengo que decirte algo; al inicio las 2-3 primeras pruebas no lo hice pero ya después si.

Vine a dejarte mi mensaje y agradecimiento, volví a probar y no lo hace, pero al repetir 2-3 veces si pasa a repetir el mensaje

¿Qué pudra ser?

No puedo determinar dónde está tu problema si no veo el UF y qué otras macros tiene cada control.

Enviame copia a mi correo cibersoft.arg de gmail.com

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas