2016-07-28 11 views
2

私は今までこのアイデアに遭遇したことはありませんが、現在のマクロ内の変数に別のマクロを設定してVBAコードから呼び出すことはできますか?私は限られた知識の中でそうしようとしましたが、それは機能しません。Subを別のSubから動的に呼び出す方法

私が持っているのは、レポートのリストであるコンボボックスを含むユーザーフォームです。次に、そのコンボボックスから選択した値を、特定のSub(タイトル別)と照合します。各レポートには、毎月更新する独自のマクロがあります。

私は、一致するSubタイトルを含むワークシートのセル内の値と等しくなるように変数(iVal)を設定するために、(ユーザーフォーム上の '実行'ボタンに基づいて)最初のマクロのVBAをコーディングしました。私はその変数を使って、その値に基づいて適切なSubタイトルを呼び出すことができればと思っていました。それは変数を好きではありません。

ここでエラーのスクリーンショットを参照してください。https://i.imgsafe.org/a2a199edb8.png

をそうでなければ、私は私の最高のオプションは、配列のループを使用することであると思っています。私は、このコンボボックスから選択可能なこのリストは、時間の経過と共に拡大または縮小する可能性のあるほぼ50種類の可能性があるため、これを避けることを望んでいました。明らかに、これは時間がかかり、レポートと一致するマクロのリストが変更されたときに管理するのが難しいでしょう。

これが可能かどうかわかりません。これは私が前に取り組んだことのない新しいVBAの挑戦です。そのため、「私が知らないことは分かりません。建設的なフィードバックに感謝します。

Private Sub Run_Click() 
    'Runs the Analysis 

    Dim ProjectWB As Workbook 
    Set ProjectWB = ActiveWorkbook 
    Dim iWS As Worksheet 
    Dim sName As String 
    Dim tName As String 
    Dim iName As String 

    Set iWS = Worksheets("Streetwise Ideas") 

    'Error handling for empty file fields 

    Application.ScreenUpdating = False 
    Unload Me 

     If TextBox1.Value = "" Then 
      MsgBox "Please select a Source file.", vbCritical, "Error No Source file" 
      If vbOK Then 
      UserForm1.Show 
      End If 
     Else 
     If TextBox2.Value = "" Then 
      MsgBox "Please select a Target file.", vbCritical, "Error No Target file" 
      If vbOK Then 
      UserForm1.Show 
      End If 
     Else 
     End If 
     End If 

     'place value of the selection from the combobox in cell D2 on "Streetwise Ideas" sheet for referencing later in the macro 
     iWS.Activate 
     Range("D2").Select 
     Selection.Value = cbSWIdeas 

    sName = TextBox1.Value 

    tName = TextBox2.Value 

    'Opens Source workbook file and sets it to variable sWB 
    Dim sWB As Workbook 
    Set sWB = Workbooks.Open(sName) 

    'Opens Target workbook file and sets it to variable tWB 
    Dim tWB As Workbook 
    Set tWB = Workbooks.Open(tName) 

    'Calls the correct macro for the combobox selection 

    Dim iVal As String 
    iVal = iWS.Range("E2").Value 

     If iVal <> "" Then 
      Call iVal 
     Else 
      'do nothing 
      MsgBox ("No Idea Selected.") 
     Exit Sub 

     End If 

    Application.ScreenUpdating = True 

    End Sub 

答えて

3

は、名前

Sub Example() 

    Dim MacroName As String 
    MacroName = "HelloWorld" 
    Application.Run MacroName 

End Sub 

Sub HelloWorld() 

    MsgBox "Hello World!" 

End Sub 
+0

おかげでたくさんトーマスInzinaをマクロを呼び出すためにApplication.Runを使用することができます!私は自分の問題を研究していたとき(Application.Runが含まれていた)、別のマクロを実行するためのさまざまな方法について何かを読んで覚えているので、笑っています。素晴らしい! –

+0

解決策は、通常見落とす細部に隠されています。 –

関連する問題