我有以下代码。
我不能为我的生活弄清楚。
我想根据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
答案 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_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
答案 1 :(得分:2)
只需将托管宏的工作簿名称添加为前缀即可。 就像在细胞中做公式一样:
Application.Run "WorkbookNameAsString.app_ext!MacroName"
答案 2 :(得分:-1)
VBA使用'&'进行串联;
不正确:
pro = "sale_call" + i
已更正:
pro = "sale_call" & i
希望对您有帮助。