2013-04-12 4 views
10

私は次のコードを持っています。Stringを使ってSubを呼び出そうとすると - VBA

私の人生のために私はそれを理解できません。

iの値に応じて別のサブを呼び出すとします。

たとえば、i = 1の場合はsale_call1を呼び出し、i = 2の場合は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 

答えて

16

この

Application.Run pro

例でCall proを交換してみ

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 

フォロー

あなたのコードは、モジュールではなく、ユーザーフォームまたは彼女にない場合時間コードsale_call1またはsale_call2がモジュールに配置されない限り、Application.Runのコード領域は機能しません。それらをモジュールに移動したくない場合は、CallByNameを使用する必要があります。この機能に関するExcelの組み込みヘルプを確認してください。ここでコードが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

あなたは、コードを貼り付けている1004 – CallMeMunchy

+0

のランタイムエラーを取得します:(動作しません。私はそれがサブを確認してください:)投稿する前にコードをテストしました。 'sale_call1'と' sale_call2'はモジュールに置かれます。 –

+0

フォローアップは私のために完璧に働いた、ありがとう! –

2

であるだけでマクロがホストされているワークブック名​​を接頭辞として追加することを前提としてい例があります。セルに数式をしているときのように :

Application.Run "WorkbookNameAsString.app_ext!MacroName" 
関連する問題