¿Evento de dos o más controles al tiempo en VBA?

Existe alguna forma de por ejemplo saber si se cambio el valor en un grupo de varias textbox, se que puedo poner el evento textbox_change, a cada una, y ponerle el código a cada evento, pero para reciclar el código y optimizar tiempo, ¿No puedo hacerlo de forma global? Intente lo siguiente:

1. Poner todos los controles en un marco y luego poner el evento del marco. [No funciono]

2. Crear un array con todos los controles y luego controlar cualquier evento del array [No supe hacerlo]

I Need help!

2 Respuestas

Respuesta
1

Si la macro no tienen controles de formulario como textbox puedes escribirla en un modulo standard, y llamarla desde cada textbox con el evento afterupdate con call (nombre de la macro) o simplemente nombre de la macro, en caso de que la macro maneje textbox las instrucciones las escribes dentro del modulo del formulario como:

sub macro

Instrucciones

Endif

E igual la llamas desde cada textbox como mencione antes

¡Gracias! Pues es precisamente lo que quería evitar, porque resulta que hay formularios con muchas "Textbox", y aveces uno no quisiera estar poniendo el mismo código a cada una, por eso que ria saber si había una forma de agruparlas y que si cualquiera en ese grupo sufre el evento seleccionado, ejecute el código deseado. Pero igual muchas gracias.

Respuesta
1

Cristian: Otro punto de vista aparte de lo citado por James (un saludo James), es el siguiente.

Si dentro de todos los Controles de tu formulario tienes solo unos cuantos que quieres controlar, mi sugerencia es que le pongas un Nombre identificable de modo facil >> Ejemplo TBox01, TBox02... TBoxnn

Entonces en el Evento Load del Formulario le pones éste Código >>

Private Sub Form_Load()
Dim Ctrl As Access.Control
'Añado al evento OnChange a todos los controles que comiencen por "TBox".
For Each Ctrl In Me.Controls
        If Ctrl.ControlType = acTextBox And Left(Ctrl.Name, 4) = "TBox" Then
                Ctrl.OnChange = "=Avisame('" & Ctrl.Name & "')" 'Avisame es una Función que hay mas abajo y que abre el Formulario "FAsinacionPuntual"
        End If
Next Ctrl
End Sub

Como puedes ver le digo que cuando cambie un control ejecute una Función que llamo avisame, pero le puedes llamar como quieras. Esta función es >>

Public Function Avisame(StrControl As String)
Dim LongTextoControl As Integer
Dim TextoDelControl As String
On Error GoTo Avisame_TratamientoErrores
'Antes de dar el primer aviso aviso: Compruebo la longitud del Texro
LongTextoControl = Nz(Len(Me.Controls(StrControl).Text), 0)
'Si el control Tiene una Longitud de >= 6 >> Puede ser el valor que se quiera
If LongTextoControl >= 6 Then
        TextoDelControl = Me.Controls(StrControl).Text
        MsgBox "El Texto del Control ahora es: " & TextoDelControl
Else
        'No doy aviso hasta que tenga 6 o más caraceres
End If
Avisame_Salir:
On Error GoTo 0
Exit Function
Avisame_TratamientoErrores:
MsgBox "Error " & Err & " en Funcion.: Avisame de Documento VBA: Contacts (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Avisame_Salir
End Function  'Avisame(StrControl As String)

Aquí pongo el aviso, pero supeditado a que el texto tenga 6 o más caracteres, pero puedes poner >=0 o lo que tu quieras. Es para hacer didáctico el ejemplo.

Pongo eso, porque no sé si quieres disparar otro evento o Ejecutar otra acción.

La respuesta principal es la primera parte como respuesta a lo que citas >>

¿No puedo hacerlo de forma global?. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas