Попытка вызвать 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

Я надеюсь, что это помогает.

Другие вопросы по тегам