如何在VBA中使用Loop调用子例程子集?

我有一系列的子程序( Sub1Sub2Sub3等)。 我想根据用户定义的值调用这些子例程的一个子集。 例如,从7到13。

我想使用基于子程序的名称中的数字的循环,但它似乎并没有在VBA中工作。 有没有人有build议?

示例代码:

 Sub test() Dim i As Integer Dim Start As Integer Dim End As Integer Start = CEM_Exec.Range("User_Start") End = CEM_Exec.Range("User_End") For i = Start To End Call Sub"i" Next i End Sub 

假设所有的预定程序都在Module1中,

  Sub test() Dim i As Integer Dim intStart As Integer Dim intEnd As Integer intStart = CEM_Exec.Range("User_Start") intEnd = CEM_Exec.Range("User_End") For i = intStart To intEnd Application.run "Module1.Sub" & i Next i End Sub 

我认为简单的解决scheme是在For循环中使用Select Case

 Sub test() Dim i As Integer, Start_Num As Integer, End_Num As Integer Start_Num = CEM_Exec.Range("User_Start") End_Num = CEM_Exec.Range("User_End") For i = Start_Num To End_Num Select Case i Case 1 Call Sub1 Case 2 Call Sub2 Case 3 Call Sub3 'and so on ' ' ' ' Case Else 'Error message End Select Next i End Sub 

您可以使用Application.Run方法以及过程的名称:

注意: End是VBA中的一个保留字,所以使用一个名为iEnd的variables会更安全(我已经更新了StartEnd来成为iStartiEnd

 Sub test() Dim i As Integer Dim iStart As Integer Dim iEnd As Integer iStart = CEM_Exec.Range("User_Start") iEnd = CEM_Exec.Range("User_End") For i = iStart To iEnd Application.Run "Sub" & i Next i End Sub