Cómo ejecutar una o varias macros desde un formulario

Desde un formulario, que consta de un Listbox y un CommandButton, quiero ejecutar una o varias macros, según las marque desde el listbox; pero no se cómo hacerlo.

Al abrir el formulario, en el listbox aparecen todos los nombres de las macros que tengo, con el siguiente código:

Private Sub UserForm_Activate()
On Error Resume Next
With Sheets("CONSULTAS")
For a = 1 To 13
lista.AddItem .Cells(a, 2)
Next a
End With
End Sub

Una vez abierto, puedo elegir, a la vez, una, dos, tres..., etc,; o, sólo una. Lo que no se es el código que he de poner para que, al ejecutar el Commandbutton, se ejecuten las macros seleccionadas.

NOTA.- Todas las macros se encuentran en un módulo.

2 Respuestas

Respuesta
2

Te anexo el código:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Dim macros()
    For i = 0 To Lista.ListCount - 1
        If Lista.Selected(i) Then
            n = n + 1
            ReDim Preserve macros(n)
            macros(n) = Lista.List(i, 0)
        End If
    Next
    For m = LBound(macros) To UBound(macros)
        Run macros(m)
    Next
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

También puede quedar así, pero no sé que contenga cada macro, y puede interrumpir el ciclo, por eso almacené los nombres de las macros en un arreglo.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Dim macros()
    For i = 0 To Lista.ListCount - 1
        If Lista.Selected(i) Then
            Run Lista.List(i, 0)
        End If
    Next
End Sub

Gracias por tu respuestas, Dante Amor. Entiendo que primero defines todas las macros con el nombre "Lista", para que se pueda ejecutar tu código; ¿Es así?

Pues eso es lo que he hecho y no me funciona. Por favor, dime si he hecho algo mal o acláramelo.

Saludos.

No, el nombre de "Lista" se refiere a tu control de Listbox.

Tu listbox tiene que tener la propiedad de Multiselect = true, para que puedas seleccionar varios items.

Envíame tu archivo para revisar cómo tienes tu listbox

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “rg10” y el título de esta pregunta.

Efectivamente, era un problema del listbox, que no tenía marcada la multiselección.

Cuando marco varias macros en el listboxdel UserForm para que se ejecuten, cómo puedo desmarcarlas todas a la vez, y no de una en una.

Muchísimas gracias, Dante Amor.

Para desmarcar todas pon el siguiente código en un botón:

Private Sub CommandButton1_Click()
    For i = 0 To Lista.ListCount - 1
        Lista.Selected(i) = False
    Next
End Sub

sal u  dos

Respuesta
1

 H o l a 

en el commandbutton escribe call  mas el nombre de macro que tienes en el módulo 

Private Sub CommandButton1_Click()
'
Call macro1
'
End Sub

Si hago lo que me dices, cuando ejecute el Commandbutton, siempre ejecutará la macro que ponga en el código, independientemente de la que elija en el listbox. De lo que se trata es que cuando elija las macros que sean, se ejecuten. No se si me he explicado; en cualquier caso, si necesitas cualquier aclaración, no dudes en pedírmela.

Muchas gracias.

H o l a 

Te paso la macro.

Si por ejemplo en el listbox tienes 3 registros y por cada registro quieres llamar una macro.

Private Sub CommandButton1_Click()
'
If lista.ListIndex = -1 Then Exit Sub
'
    Select Case lista.ListIndex
    Case 0
        Call macro1
    Case 1
        Call macro2
    Case 2
        Call macro3
    '
    '
    'aqui el resto
    '
End Select
'
End Sub

valora la respuesta para finalizar saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas