到目前为止,我从未遇到过这个想法,但是可以将另一个宏设置为当前宏中的变量,以便从VBA代码中调用它吗?我已经尝试在我有限的知识中这样做而且它没有用。
我所拥有的是一个包含组合框的用户表单,该组合框是一个报表列表。然后我从该组合框中选择的值与特定的Sub(按标题)匹配。每个报告都有自己的宏,用于每月更新。
我编写了第一个宏的VBA(基于用户表单上的“运行”按钮),将变量(iVal)设置为等于包含匹配的子标题的工作表单元格中的值。我希望我可以使用该变量根据该值调用相应的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
答案 0 :(得分:3)
您可以使用Application.Run
按名称调用宏
Sub Example()
Dim MacroName As String
MacroName = "HelloWorld"
Application.Run MacroName
End Sub
Sub HelloWorld()
MsgBox "Hello World!"
End Sub