Ejecutar macro en un formulario al salir de otro formulario - VBA Excel

Traigo otra vez una pregunta que quizás para muchos sea muy fácil de realizar. De hecho pensé que podía hacerlo, pero no he podido.

Tengo un UserForm1 donde hay un ListView, desde este formulario corro una macro donde colorea los items del ListView según algún criterio. Con un Button abro otro formulario (UserForm2) sobre encima del UserForm1. Lo que intento hacer es que al cerrar UserForm2, me corra la macro donde coloree nuevamente los items según el criterio.
He colocado la macro en el evento Activate del UserForm1 y no funciona. Tampoco la puedo hacer correr desde un Button del UserForm2. Solo me funciona en el Userform1 ..

Este es mi código para colorear los Items.

Sub ParesUnicos()
Dim Columnas As Integer
Dim Lineas As Integer
With UserForm1
    Columnas = .ListView1.ColumnHeaders.Count
    Lineas = .ListView1.ListItems.Count
    For i = 1 To Lineas
        If .ListView1.ListItems(i).ListSubItems(11) = "SI" Then
            .ListView1.ListItems(i).ForeColor = RGB(255, 0, 0)
            For X = 1 To Columnas - 1
                .ListView1.ListItems(i).ListSubItems(X).ForeColor = RGB(255, 0, 0)
            Next
        End If
    Next
End With
End Sub

Cuando lo ejecuto desde el UserForm2 es este:

Sub ParesUnicos()
Dim Columnas As Integer
Dim Lineas As Integer
With UserForm1
    Columnas = FormInicio.ListView1.ColumnHeaders.Count
    Lineas = FormInicio.ListView1.ListItems.Count
    For i = 1 To Lineas
        If UserForm1.ListView1.ListItems(i).ListSubItems(11) = "SI" Then
            UserForm1.ListView1.ListItems(i).ForeColor = RGB(255, 0, 0)
            For X = 1 To Columnas - 1
                UserForm1.ListView1.ListItems(i).ListSubItems(X).ForeColor = RGB(255, 0, 0)
            Next
        End If
    Next
End With
End Sub

Alguien sabría que esta pasando? A parte de saber que no se nada jajaja

1 Respuesta

Respuesta
1

¿Ya probaste en el evento QueryClose del UserForm2?

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Call ParesUnicos
End Sub

El evento Activate no funciona de la manera que lo has intentado. Te daré una explicación breve de mas o menos como funciona (es un poco complicado de entender). El evento Activate de un UserForm en VBA se dispara con el método Show, generalmente vemos este evento ejecutarse una sola vez, cuando el Form se abre por primera vez con el método Show. Es posible que este evento se dispare cuando el formulario deja de estar visible y vuelve a estar visible otra vez, y para que esto ocurra ciertas interacciones tienen que suceder involucrando a otras aplicaciones o bien forzándolo manualmente, pero cambiar de un UserForm a otro no dispara el evento Activate.

Es lógico que lo hayas pensado así, pero no no funciona. Maldeeeto VBA! Lol

Ahora recorde, que una manera de disparar el evento Activate es si tienes el UserForm Modaless.

Osea poniendo la propiedad Show Modal = False

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas