2013-04-12 14 views
10

Mam następujący kod.Próba wywołania Sub z ciągiem - VBA

Nie mogę do końca życia zrozumieć to.

Chcę połączyć się z innym subem w zależności od wartości i.

Na przykład, jeśli i = 1 powinien zadzwonić pod numer sale_call1, a jeśli i = 2 powinien zadzwonić pod numer 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 

Odpowiedz

16

Spróbuj

Wymień Call pro z Application.Run pro

przykładu

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 

nawiązanie

Jeżeli kod nie jest w module, ale w UserForm lub ona Obszar kodowania, a następnie Application.Run nie będzie działał, dopóki nie zostanie umieszczony w module sale_call1 lub sale_call2. Jeśli nie chcesz przenieść ich do modułu, musisz użyć CallByName. Sprawdź wbudowaną pomoc programu Excel w tej funkcji. Oto przykład, który zakłada, że ​​kod jest w 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

to nie działa :(pojawia się błąd runtime 1004 – CallMeMunchy

+0

Gdzie masz wklejony kod testowałem kodu przed wysłaniem go :) Upewnij się, że sub 'sale_call1' i' sale_call2' są umieszczone w module. –

+0

Obserwacja działała idealnie dla mnie, dzięki! –

2

Wystarczy dodać jako przedrostek nazwy skoroszytu gdzie makro jest gospodarzem. Jak wtedy, gdy robi formułę w komórce.

Application.Run "WorkbookNameAsString.app_ext!MacroName"