2013-04-12 14 views
10

Aşağıdaki koda sahibim.Dize ile Sub çağrısı çalmaya çalışılıyor - VBA

Hayatımı anlayamıyorum.

i değerine bağlı olarak farklı bir alt aramak istiyorum.

Örneğin, i = 1 ise sale_call1 numaralı telefonu arayabilir ve i = 2 ise sale_call2 numaralı telefonu arayabilir.

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 

cevap

16

bu

Application.Run pro

Örnek ile Call pro değiştirin deneyin

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 

İZLEMİNDE

kodunuzu bir modülde ancak UserForm veya She değilse Kod alanı Application.Run o zaman sale_call1 veya sale_call2 bir modüle yerleştirilinceye kadar çalışmayacaktır. Bunları bir modüle taşımak istemiyorsanız, CallByName'u kullanmanız gerekecektir. Excel'in bu işlevdeki dahili yardımını kontrol edin. İşte kod Sadece ön ek olarak makro barındırıldığı çalışma kitabı adı eklemek 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

kodu yapıştırılan var 1004 – CallMeMunchy

+0

bir çalışma zamanı hatası alın :(Ben Sub emin olun :) göndermeden önce kodu test 'sale_call1' ve 'sale_call2' bir modülde yerleştirilir. –

+0

Takip, benim için mükemmel çalıştı, teşekkürler! –

2

olduğunu varsayar bir örnektir. Bir hücrede bir formül yaparken gibi:. çalışmıyor

Application.Run "WorkbookNameAsString.app_ext!MacroName"