Condividi tramite

Macro che richiama altre macro

Anonimo
2012-04-14T19:31:27+00:00

Ciao a tutti,

Visto che in questo forum non di rado mi sono ritrovato ad ammirare codici macro inverosimili, mi sono chiesto e rigiro a voi esperti. Esiste la possibilità tramite macro richiamare altre macro? Mi spiego meglio, ho una cartella con una ventina di macro con numero progressivo (macro1, macro2, macro3,….. sino ad arrivare a macro20) è possibile tramite macro richiamare 5 di queste macro esempio:  macro3, macro7, macro 11, macro18 e macro20 e poi decidere quale di queste 5 devo eseguire?

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-04-17T04:51:40+00:00

Salve a tutti e scusate se mi Intrometto.

Non sarebbe più comodo usare un menù PopUp?

Ecco un esempio:

http://uploading.com/files/186fb462/PopUpDemo.xlsm

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-04-15T09:17:30+00:00

Ciao a tutti,

Visto che in questo forum non di rado mi sono ritrovato ad ammirare codici macro inverosimili, mi sono chiesto e rigiro a voi esperti. Esiste la possibilità tramite macro richiamare altre macro? Mi spiego meglio, ho una cartella con una ventina di macro con numero progressivo (macro1, macro2, macro3,….. sino ad arrivare a macro20) è possibile tramite macro richiamare 5 di queste macro esempio:  macro3, macro7, macro 11, macro18 e macro20 e poi decidere quale di queste 5 devo eseguire?

Vedi un po' partendo da qui(codice da copia/incollare in un modulo standard) ed eseguendo Macro10000 a capire come funziona:

Public Sub Macro10000()

    Dim lRisposta As Long

    Dim lng As Long

    For lng = 1 To 5 Step 2

        lRisposta = MsgBox("Eseguire la Macro" & lng & "?", vbYesNo + vbQuestion, "Attenzione")

        If lRisposta = vbYes Then

            Application.Run ("Macro" & lng)

        End If

    Next

End Sub

Public Sub Macro1()

    MsgBox "Ciao da Macro1"

End Sub

Public Sub Macro2()

    MsgBox "Ciao da Macro2"

End Sub

Public Sub Macro3()

    MsgBox "Ciao da Macro3"

End Sub

Public Sub Macro4()

    MsgBox "Ciao da Macro4"

End Sub

Public Sub Macro5()

    MsgBox "Ciao da Macro5"

End Sub

Public Sub Macro6()

    MsgBox "Ciao da Macro6"

End Sub

In pratica lancio le Macro1/3/5 da Macro10000, chiedendo di volta in volta all'utente se conferma il lancio della singola macro. Da qui, il mondo... ;-)

Un'alternativa è dichiarrare un Array con i nomi delle macro da eseguire:

Public Sub Macro10000()

    Dim lRisposta As Long

    Dim lng As Long

    Dim myArray As Variant

    myArray = Array("Macro2", "Macro3", "Macro4", "Macro6")

    For lng = LBound(myArray) To UBound(myArray)

        lRisposta = MsgBox("Eseguire" & myArray(lng) & "?", vbYesNo + vbQuestion, "Attenzione")

        If lRisposta = vbYes Then

            Application.Run (myArray(lng))

        End If

    Next

End Sub

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-04-16T09:32:19+00:00

    Grazie Mauro,

    Funziona in modo eccezionale, sei stato un grande. A proposito, quello che fai a favore di noi inesperti non lo prendo mai per scontato. Grazie ancora.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-04-15T21:07:27+00:00

    Carissimo Mauro,

    Sei un fenomeno. Quando leggo le varie risposte che dai ai post del forum e sostieni che praticamente con il vba si può praticamente fare tutto credo che la tua non sia un'esagerazione. Ho utilizzato delle 2 macro postate la seconda che mi ha permesso di inserire i nomi delle mie macro. Volevo aggiungere, è possibile, scusa per il è possibile....... una volta eseguito la macro da me scelta invece di scorrere le restanti fare in modo che si chiuda il MsgBox? Esempio eseguo Macro1, invece di scorrere Macro2, Macro3, Macro4 e Macro5 si chiude dopo Macro1.

    Si può fare quasi tutto... ;-)

    Non so quale delle due soluzioni hai scelto.

    La prima modificala così:

    If lRisposta = vbYes Then

        Application.Run ("Macro" & lng)

        Exit For

    End If

    La seconda così:

    If lRisposta = vbYes Then

        Application.Run (myArray(lng))

        Exit For

    End If

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-04-15T14:38:17+00:00

    Carissimo Mauro,

    Sei un fenomeno. Quando leggo le varie risposte che dai ai post del forum e sostieni che praticamente con il vba si può praticamente fare tutto credo che la tua non sia un'esagerazione. Ho utilizzato delle 2 macro postate la seconda che mi ha permesso di inserire i nomi delle mie macro. Volevo aggiungere, è possibile, scusa per il è possibile....... una volta eseguito la macro da me scelta invece di scorrere le restanti fare in modo che si chiuda il MsgBox? Esempio eseguo Macro1, invece di scorrere Macro2, Macro3, Macro4 e Macro5 si chiude dopo Macro1.

    La risposta è stata utile?

    0 commenti Nessun commento