Evento Change para cualquier TextBox en un formulario.

Estoy intentando crear un código que detecte cuando cualquier textbox en el formulario sufra un cambio y que ejecute una acción luego del cambio. Quiero hacer un código en general sin que implique usar el evento change en cada TextBox sino usar el ciclo for para ello. ¿Alguna idea de como se podría llevar a cabo?

1 respuesta

Respuesta
2

H o l a:

Tienes que crear una clase y agregar todos los textbox en la clase.

Primero crea la clase1 y agregas el siguiente código:

Option Explicit
Public WithEvents tbxCustom1 As MSForms.TextBox 'Custom Textbox
Private Sub tbxCustom1_Change()
    'En esta parte tienes que poner la acción
    MsgBox "Estás modificando el textbox: " & tbxCustom1.Name
End Sub
Private Sub Class_Terminate()
     'Destroy The Class Object And Free Up Memory
    Set tbxCustom1 = Nothing
End Sub

Instrucciones para crear una clase

  1. Abre tu hoja de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo de clase
  4. En el panel del lado derecho copia la macro

Ahora, en tu userform pon el siguiente código:

Dim colTbxs As Collection 'Collection Of Custom Textboxes
Private Sub UserForm_Initialize()
'Referencia
'http://www.ozgrid.com/forum/showthread.php?t=80631
    Dim ctlLoop As MSForms.Control
    Dim clsObject As Clase1
    'Create New Collection To Store Custom Textboxes
    Set colTbxs = New Collection
    'Loop Through Controls On Userform
    For Each ctlLoop In Me.Controls
        'Check If Control Is A Textbox
        If TypeOf ctlLoop Is MSForms.TextBox Then
            'Create A New Instance Of The Event Handler CLass
            Set clsObject = New Clase1
            'Set The New Instance To Handle The Events Of Our Textbox
            Set clsObject.tbxCustom1 = ctlLoop
            'Add The Event Handler To Our Collection
            colTbxs.Add clsObject
        End If
    Next ctlLoop
End Sub
Private Sub UserForm_Terminate()
     'Destroy The Collection To Free Memory
    Set colTbxs = Nothing
End Sub

En el ejemplo que te estoy enviando, en la clase puse esto:

    'En esta parte tienes que poner la acción
    MsgBox "Estás modificando el textbox: " & tbxCustom1.Name

En esa parte tienes que poner la acción que quieras realizar.

Avísame si necesitas ayuda para poner la acción.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas