2013-04-12 18 views
10

Ho il seguente codice.Cercando di chiamare un Sub con una stringa - VBA

Non posso per la vita di me capirlo.

Desidero chiamare un diverso sottotitolo in base al valore di i.

Ad esempio, se i = 1 deve chiamare sale_call1 e se i = 2 deve chiamare sale_call2.

Private Sub test_Click() 
    Dim i As String 
    Dim pro As String 

    i = Me.tb1.Value 
    pro = "sale_call" + i 

    If i = "1" Then 
     Call pro 
    Else 
     Call pro 
    End If 
End Sub 

Sub sale_call1() 
    MsgBox "Hello" 
End Sub 

Sub sale_call2() 
    MsgBox "goodbye" 
End Sub 

risposta

16

Prova questa

Sostituire Call pro con Application.Run pro

Esempio

Private Sub test_Click() 
    Dim i As String 
    Dim pro As String 

    i = 1 
    pro = "sale_call" + i 

    '~~> This will run sale_call1 
    Application.Run pro 

    i = 2 
    pro = "sale_call" + i 

    '~~> This will run sale_call2 
    Application.Run pro 
End Sub 

Sub sale_call1() 
    MsgBox "Hello" 
End Sub 

Sub sale_call2() 
    MsgBox "goodbye" 
End Sub 

FOLLOWUP

Se il codice non è in un modulo, ma in un form utente o lei L'area Codice quindi Application.Run non funzionerà finché l'ora sale_call1 o sale_call2 non viene inserita in un modulo. Se non si desidera spostarli su un modulo, sarà necessario utilizzare CallByName. Controlla la guida integrata di Excel su questa funzione. Ecco un esempio che assume che il codice è in Userform1

Private Sub CommandButton1_Click() 
    Dim i As String 
    Dim pro As String 

    i = 1 
    pro = "sale_call" + i 

    '~~> This will run sale_call1 
    CallByName UserForm1, pro, VbMethod 

    i = 2 
    pro = "sale_call" + i 

    '~~> This will run sale_call2 
    CallByName UserForm1, pro, VbMethod 
End Sub 

Sub sale_call1() 
    MsgBox "Hello" 
End Sub 

Sub sale_call2() 
    MsgBox "goodbye" 
End Sub 
+0

che non funziona :(Prendi un errore di runtime 1004 – CallMeMunchy

+0

Dove l'avete incollato il codice ho provato il codice prima di pubblicare it :) Assicurarsi che il Comparto 'sale_call1' e' sale_call2' sono collocati in un modulo. –

+0

Il follow up ha funzionato perfettamente per me, grazie! –

2

Basta aggiungere come prefisso il nome della cartella di lavoro in cui la macro è ospitato. Come quando si fa una formula in una cella:.

Application.Run "WorkbookNameAsString.app_ext!MacroName" 
Problemi correlati