Como controlar varios textbox con un solo sub con evento change

Saludos tengo un formulario con 20 textbox y al momento de escribir me busca en una base de datos si existe el contenido y me afecta dos etiquetas y tiene otra sub que al salir si no existe me afecta una etiqueta y me limpia otras el código es el siguiente

Private Sub TxtEstimacion1_Change()
CampoEstimacion = TxtEstimacion1.Text
CampoUM = LblUM1.Caption
CampoDescripcion = LblDescripcion1.Caption
On Error Resume Next
Application.ScreenUpdating = False
If NoEstimacion(TxtEstimacion1.Text) <> 0 Then
      SiExisteEstimacion
Else
      NoExisteEstimacion
End If
LblUM1.Caption = CampoUM
LblDescripcion1.Caption = CampoDescripcion
LblDescripcion1.ForeColor = Color
Application.ScreenUpdating = True

End Sub


Private Sub TxtEstimacion1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If LblDescripcion1.Caption = "No Existe Registro" Then
ErrorEstimacion
Cancel = True
TxtEstimacion1.Text = Empty
LblDescripcion1.Caption = Empty
TxtEstimacion1.SetFocus
End If

End Sub

Y así tendría que hacerlo en los 20 textbox para modificar sus respectivas 40 label. Habría una opción de solo utilizar un solo sub y tenga efecto en los 20 textbox

gracias

1 Respuesta

Respuesta
1

Se podría hacer una clase con los 20 textbox. Envíame tu archivo con el formulario para hacer pruebas, tengo que identificar que tienes en CampoEstimacion, supongo que tienes una fórmula. También tengo que probar que se ejecuten las funciones SiExisteEstimacion y NoExisteEstimacion, y todo lo demás que tienes en cada evento. Pero para no tener que recrear todo, mejor envíame tu archivo.

listo ya te lo mande gracias

Te envié el archivo con la clase, en el correo van varios comentarios.

Public WithEvents tbxCustom1 As MSForms.TextBox 'Custom Textbox
'Referencia
'http://www.ozgrid.com/forum/showthread.php?t=80631
Private Sub tbxCustom1_Change()
'Mod.Por.Dante Amor
    Dim num As Variant
    num = Mid(tbxCustom1.Name, 14)
    FrmAltas.CampoEstimacion = FrmAltas.Controls("TxtEstimacion" & num).Text
    FrmAltas.CampoUM = FrmAltas.Controls("LblUM" & num).Caption
    FrmAltas.CampoDescripcion = FrmAltas.Controls("LblDescripcion" & num).Caption
    On Error Resume Next
    Application.ScreenUpdating = False
    If NoEstimacion(FrmAltas.Controls("TxtEstimacion" & num).Text) <> 0 Then
        FrmAltas.SiExisteEstimacion
    Else
        FrmAltas.NoExisteEstimacion
    End If
    FrmAltas.Controls("LblUM" & num).Caption = FrmAltas.CampoUM
    FrmAltas.Controls("LblDescripcion" & num).Caption = FrmAltas.CampoDescripcion
    FrmAltas.Controls("LblDescripcion" & num).ForeColor = FrmAltas.wColor
    Application.ScreenUpdating = True
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta.

ok deja lo pongo a funcionar y te confirmo si surgen otras dudas ;) gracias

Por supuesto, revisa los comentarios que te envié, si tienes dudas sobre la clase, avísame. Si tienes otras dudas, crea otra pregunta en todo expertos y con gusto te ayudo.

Si clase te funciona, no olvides valorar esta respuesta.

Saludos. Dante Amor

ya lo aplique y no me hace nada creo que algo me esta faltando puse hasta arriba del formulario el código que me mandaste por que si lo aplico después me marca error en la función

Public WithEvents tbxCustom1 As MSForms.TextBox

ya cheque la referencia y creo que va a ser la opción MSForms.TextBox por que al momento de escribir MSForms. me desplega una lista con las opciones y todas empiezan con fm y no se encuentra el TextBox al parecer la referencia esta sobre VB y este formulario es sobre VBA no se si afecte eso???  :(

Para las adecuaciones que hice ya están aplicadas en el archivo que te envié y si funcionan, tienes que probar con el archivo que te envié.

La macro que puse en esta respuesta sólo es la Clase, pero la clase y la carga de textbox ya va en el archivo que te envié.

Prueba con el archivo

Buenos días disculpa no me llego el archivo al correo me lo pudieras reenviar por favor :D

Una disculpa, algo pasó en mi correo que no salió el archivo, ya te lo envié para que lo revises.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas