2015-06-10 10 views
6

Questo è il mio codice di provachiamata un sub VBA utilizzando un valore stringa

Sub dotask() 

    Dim qusub As String 
    qusub = Worksheets("Task List").Range("C2").Value 

    MsgBox qusub 
    Application.Run qusub 

End Sub 

Sub msg1() 

    MsgBox "sub msg1" 

End Sub 

Sub msg2() 

    MsgBox "sub msg2" 

End Sub 

Sub msg3() 

    MsgBox "sub msg3" 

End Sub 

Sub msg4() 

    MsgBox "sub msg4" 

End Sub 

Tutto questo è contenuto in un unico modulo standard. Ho letto Trying to call a Sub with a String - VBA e ho scritto il mio codice in base a ciò che ho trovato lì (cioè utilizzando Application.Run). Il foglio di lavoro C2 della Lista attività contiene "msg3" al momento. Quando eseguo sub "doTask" Ho ottengo una finestra di messaggio che dice "msg3" come voglio, ma poi ricevo il seguente messaggio di errore:

run-time '1004':

Non può eseguire il macro 'msg3'. La macro potrebbe non essere disponibile in questa cartella di lavoro o tutte le macro potrebbero essere disabilitate.

Sto lavorando su Excel 2010 e il file è .xlsm - cosa devo fare per ottenere il mio codice da eseguire come lo voglio?

+0

Hmm, questo codice è contenuto in un modulo? –

+0

Sì, tutto questo è contenuto in un singolo modulo ed è l'unico modulo in questo file –

+0

Vedere questa domanda precedente: http://stackoverflow.com/questions/19845944/dynamic-function-calls-in-excel-vba – Rory

risposta

3

appena eseguito qui. msg1 sembra essere una parola riservata ... cambiala in qualcos'altro e funziona bene =)

+0

Grazie, ha funzionato –

+0

'Application.Run" Module1.msg1 "' ha funzionato anche. Stranamente, non posso nemmeno eseguire la macro msg1 dalla finestra di dialogo Macro –

1

Utilizzando GetRef, si fornisce il riferimento al sub. Vedere la mia domanda here per esempio

MODIFICA: seguendo i suggerimenti nei commenti, qui parte della soluzione a questa domanda.

sub one(para) 
    WScript.Echo para & " from one" 
end sub 

sub two(para) 
    WScript.Echo para & " from two" 
end sub 

sub main(subname, para) 
    Dim f : Set f = GetRef(subname) 
    f para 
end sub 

main "one", "test" '=>test from one 
+0

Questo è apparso nella coda Post di bassa qualità. Sto saltando il salto, ma penso che questo potrebbe usare un po 'più di spiegazione. :) – Almo

Problemi correlati