私は今までこのアイデアに遭遇したことはありませんが、現在のマクロ内の変数に別のマクロを設定して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
おかげでたくさんトーマスInzinaをマクロを呼び出すために
Application.Run
を使用することができます!私は自分の問題を研究していたとき(Application.Runが含まれていた)、別のマクロを実行するためのさまざまな方法について何かを読んで覚えているので、笑っています。素晴らしい! –解決策は、通常見落とす細部に隠されています。 –