Ответ 1
Попробуйте это
Замените 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
Followup
Если ваш код отсутствует в модуле, но в области Userform или Sheet Code, то 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