2016-03-29 9 views
0

私は一連のサブルーチン(Sub1,Sub2Sub3など)を持っています。私は、ユーザー定義の値に基づいてこれらのサブルーチンのサブセットを呼びたいと思います。たとえば、サブ7から13です。VBAでループを持つサブルーチンのサブセットを呼び出すにはどうすればよいですか?

サブルーチンの名前に基づいてループを使用すると考えましたが、VBAでは機能しないようです。誰にでも提案はありますか?

コード例:

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 
+1

名前のもの。メソッド( "サブルーチン")は、動詞で始まる名前を持つ必要があります。名前を読み取るだけで、それらが何をするかを知ることができます。 'Sub1'、' Sub2'、および 'Sub23'は、「ああ、私はそのコードを維持したくありません」以外は何も意味しません。 –

+1

コードがクラスモジュールにある場合は、 'CallByName'を調べてください。それ以外の場合は、コードが標準コードモジュールにある場合、 'Application.Run'が行います。 –

答えて

1

私はあなたの問題の簡単な解決策は、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 
2

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 
1

あなたはプロシージャの名前と一緒に、Application.Run方法を使用することができ、Module1の中に収容されています

注:Endは予約語でありますVBAでは、iEndという名前の変数を使用する方が安全です(私はStartEndiStartiEndに更新しました。

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 
関連する問題