Evento exit o otro, no me soluciona el SetFocus
Private Sub txtCod_Exit(ByVal Cancel As MSForms.ReturnBoolean) If MINCaracter(txtCod, "Cod/Producto", 10) = False Then Exit Sub ''AQUI 10 DIGITOS Max txtCod.SetFocus End Sub Private Sub txtCod_AfterUpdate() End Sub
Hola Ariel, de nuevo con este embrollo. Pruebo 1 o 2 eventos y ninguno me devuelve el focus al txtCod
Después de Aceptar el mensaje, en cualquier evento apropiado para el fin, siempre me pasa el focus al siguiente Box
¿Será qué puedes hacer algo? Diciéndome alguna posible solución, (¿si la hay)?
2 Respuestas
Prueba lo siguiente:
Private Sub txtCod_Exit(ByVal Cancel As MSForms.ReturnBoolean) If MINCaracter(txtCod, "Cod/Producto", 10) = False Then Exit Sub ''AQUI 10 DIGITOS Max Cancel = True End Sub
Hola Dante.
Al cambiar de TextBox (evento exit) No, me queda el cursor en el TextBox siguiente.
A ver; escribo menos de 10 caracteres en txtCod cambio al TxtBox soguiente y al hacer ese cambio de cursor, me manda el mensaje que el txtCod, no tiene los caracteres suficientes, la doy aceptar y veo que el cursor está en el txt que sigue al txtCod, no aparece en el txtCod si no en el siguiente.
Voy a tratar de adivinar.
Si capturas menos de 10 caracteres en el txtCod, entonces:
Private Sub txtCod_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Len(txtCod) < 10 Then MsgBox "no tiene los caracteres suficientes" Cancel = True End If End Sub
No, no es adivinar, Dante, escribí:
Escribo menos de 10 caracteres en txtCod cambio al TxtBox siguiente y al hacer ese cambio de cursor, me manda el mensaje que el txtCod, no tiene los caracteres suficientes, le doy aceptar y veo que el cursor está en el txt que sigue al txtCod, no aparece en el txtCod si no en el siguiente.
Puede que no sepa explicarme como desearías, discúlpame
Resumiendo: El txtCod esta con macro para 10 caracteres MAX y 10 MIN
Escribo en el txtCod MENOS que 10 caracteres, al salir del txtCod (evento Exit) me avisa de que el txtCod no tiene la cantidad de caracteres suficiente.
En el aviso, piso aceptar, desaparece el aviso y el cursor aparece en otr oTectBox NO EN EL txtCod donde debo completar la cantidad de caracteres (10) para que pueda seguir llenando los demás textBox.
Gracias
Aunque existe esta macro, recorriendo los módulos la vi, no me soluciona el caso
Function MINCaracter(wtext As MSForms.Control, Texto, cantidad) 'Por.Dante Amor 'Valida contenido de un textbox If Len(wtext) <> cantidad Then MsgBox "El " & Texto & " no contiene la cantidad de dígitos necesarios", 64, "" wtext.SetFocus 'deberia quedar el focu en el txtCod MINCaracter = False Else MINCaracter = True End If End Function
No, no es adivinar, Dante, escribí:
Trato de adivinar porque no entiendo qué necesitas.
Olvida las funciones y el código VBA.
Explica qué necesitas, responde brevemente qué necesitas en las siguientes situaciones:
Si en el txtCod capturo menos de 10 caracteres e intento salir, ¿qué necesitas?
Si en el txtCod capturo 10 caracteres e intento salir, ¿qué necesitas?
Si en el txtCod capturo más de 10 caracteres e intento salir, ¿qué necesitas?
Escribo en el txtCod MENOS que 10 caracteres, al salir del txtCod (evento Exit) me avisa de que el txtCod no tiene la cantidad de caracteres suficiente.
En el aviso, piso aceptar, desaparece el aviso y el cursor aparece en otr oTectBox NO EN EL txtCod donde debo completar la cantidad de caracteres (10) para que pueda seguir llenando los demás textBox.
Entonces prueba el código que puse. Reemplaza tu código por esto (no necesitas una función, lo puedes hacer en el mismo evento exit):
Private Sub txtCod_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Len(txtCod) <> 10 Then MsgBox "no tiene los caracteres suficientes" Cancel = True End If End Sub
- Compartir respuesta
Haber que tal así
Function MINCaracter(wtext As MSForms.Control, cantidad) If Not (Len(wtext) = cantidad) Then MsgBox "El " & Texto & " no contiene la cantidad de dígitos necesarios", 64, "" wtext.SetFocus MINCaracter = False Else MINCaracter = True End If End Function
Private Sub txtCod_Exit(ByVal Cancel As MSForms.ReturnBoolean) If MINCaracter(txtCod, 10) = False Then Cancel = True End Sub
Buen día Dante
Function MINCaracter(wtext As MSForms.Control, Texto, cantidad) 'Por.Dante Amor 'Valida contenido de un textbox If Len(wtext) <> cantidad Then MsgBox "El " & Texto & " no contiene la cantidad de dígitos necesarios", 64, "" wtext.SetFocus 'deberia quedar el focu en el txtCod MINCaracter = False Else MINCaracter = True End If End Function
Private Sub txtCod_Exit(ByVal Cancel As MSForms.ReturnBoolean) If MINCaracter(txtCod, 10) = False Then Cancel = True End Sub
Todo esto funciona aperfeccion, ME DA EL MENSAJE, todo perfecto solo que pretendo que el cursor DESPUES QUE DE ACEPTAR EN EL MENSAGE
MsgBox "El " & Texto & " no contiene la cantidad de dígitos necesarios", 64, ""
el cursor no lo vea en el textBox siguiente y si en donde faltan caracteres (txtProd)
Para que complete la cantidad de caracteres (10). En el txtCod, eso es todo.
Gracias por la atención
Adriel Ortiz, buenas tardes, disculpa la demora en responder, es que me llamaron para un trabajo y tuve que ir, pues la cosa esta mala para quedarse.
Cuant oa tu proposicion anterior que dices: Haber que tal así, peobe y casi resukto, casi porque? te dejo imagenes, explicativas;
Luego aqui está el detalle, al no seguir con la operacion y cerrar el form, me vuelve a repetir el mensaje
Le doy Aceptar y me presenta esto
Piso en Depurar, me lleva a esta linea
Aclaro que; REPITO la misma OPERACIÓN SI pero completando los 10 caracteres y sigo adelante con la operación,, refiero del mensaje repetido y el error NO se dan.
¿Por qué será?
Si se resuelve bien, si no dejemos esto así porque ya se está tomando muy largo el post y puedo llevarme alguna advertencia de la admini.
Gracias a los luchadores y bien fetores
[Hola Joaom
Creo que recién has logrado ser más claro.
Modifica las instrucciones tal como te indico.
Esto pon al principio de tu formulario
'Option Explicit Public salir
Private Sub txtCod_Exit(ByVal Cancel As MSForms.ReturnBoolean) If MINCaracter(txtCod, 10) = False Then Cancel = True End Sub
Function MINCaracter(wtext As MSForms.Control, cantidad) If Not (Len(wtext) = cantidad) And salir = True Then MsgBox "El " & Texto & " no contiene la cantidad de dígitos necesarios", 64, "" wtext.SetFocus MINCaracter = False Else MINCaracter = True End If End Function
agrega salir = true en Private Sub UserForm_Initialize()
Private Sub UserForm_Initialize() salir = True end if
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) salir = False End Sub
Hola Adriel, solo ahora pude verificar el correo. Llegue ahora
Mira una cosa amigo; en el evento
Private Sub UserForm_Initialize() With cboHojas .List = Array("PRODUCTOS", "CAT", "JOHN DEERE", "SILVERADO", "INTERNACIONAL") End With DTPicker1 = (Date) FiltrarPor.List = Array("COD PRODUCTO", "NOMBRE PRODUCTO", "UBICACION") '''Call BuscaCambio 'probar cambiado de aquí para el evento change del desplegable funciona mejor evitando el error al editar o ingresar nuevo End Sub
no le veo ningun If ni End If y tu me muestras ahí en tu recomendacion un End If
Complementame con tu recomendacion, el evento por favor
Private Sub UserForm_Initialize() salir = true With cboHojas .List = Array("PRODUCTOS", "CAT", "JOHN DEERE", "SILVERADO", "INTERNACIONAL") End With DTPicker1 = (Date) FiltrarPor.List = Array("COD PRODUCTO", "NOMBRE PRODUCTO", "UBICACION") '''Call BuscaCambio 'probar cambiado de aquí para el evento change del desplegable funciona mejor evitando el error al editar o ingresar nuevo End Sub
asi
Si completo pasa de maravilla pero si no completo y cierro form, sigue dándome mensaje repetido y error en la misma línea.
SI PUEDES, Date tu tiempo, no hay prisa.
Como tienes el libro con tus macros repito, date tu tiempo.
Bien si se logra, si no, bien también
Probé en ambos casos que comentas
Aquí el vídeo
https://gyazo.com/b638bb745aba6266ff1c0506a323645b
Ajusta cada línea de la macro que te di
- Compartir respuesta