Попытка вызвать 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
2 ответа
Попробуй это
замещать 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"
VBA использует "&" для конкатенации;
Неправильно:
pro = "sale_call" + i
Исправленный:
pro = "sale_call" & i
Я надеюсь, что это помогает.