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
これを試して
Call pro
をApplication.Run 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
[〜#〜]フォローアップ[〜#〜]
コードがモジュール内ではなく、ユーザーフォームまたはシートコード領域にある場合、Application.Run
またはsale_call1
がモジュールに配置されない限り、sale_call2
は機能しません。それらをモジュールに移動したくない場合は、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
接頭辞として、マクロがホストされているワークブック名を追加するだけです。セルで数式を実行するときのように:
Application.Run "WorkbookNameAsString.app_ext!MacroName"