试图用字符串调用Sub - VBA

时间:2013-04-12 11:07:31

标签: string vba variables call

我有以下代码。

我不能为我的生活弄清楚。

我想根据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

3 个答案:

答案 0 :(得分:21)

试试这个

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

<强>后续

如果您的代码不在模块中但在Userform或Sheet Code区域中,那么Application.Run将无效,直到sale_call1sale_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

答案 1 :(得分:2)

只需将托管宏的工作簿名称添加为前缀即可。 就像在细胞中做公式一样:

Application.Run "WorkbookNameAsString.app_ext!MacroName"

答案 2 :(得分:-1)

VBA使用'&'进行串联;

不正确:

pro = "sale_call" + i

已更正:

pro = "sale_call" & i

希望对您有帮助。