我目前在 Excel 中有一个组合框,它被分配给一个单独的工作表上的“宏列表”,其中列出了大约 200 个不同的宏。有时搜索下拉列表以获取您想要选择的宏可能很麻烦(它们按数字顺序排列,所以还不错),但我认为这可能会更好。
大多数宏的结构都是“PA1111_Name”——我想要的是允许用户在单元格中只输入 1111 并按下指向上述宏的“运行”按钮。在 SQL 中,它会是这样的:
SELECT Macro FROM Module WHERE Macro Like '*' & Cell.A2 & '*'
这些数字是独一无二的,所以我不关心获取多个宏的可能性。
谢谢!
最佳答案
下面将遍历事件 VBProject 的映射模块内的所有宏,并测试名称是否包含在 A1 中找到的值,如果包含,它将运行该宏,如果没有找到,它会显示没有宏的找到匹配输入值。
请记住,这只会运行它找到的第一个包含其中包含的值的宏,因为我假设您在宏名称中没有重复的值。
Sub RunMacroContainingValue()
Dim cpCurrent As VBComponent
Dim lngCurrentLine As Long
Dim SubName As String
For Each cpCurrent In Application.VBE.ActiveVBProject.VBComponents
If cpCurrent.Name = "Mapping" Then
With cpCurrent.CodeModule
lngCurrentLine = .CountOfDeclarationLines + 1
Do Until lngCurrentLine >= .CountOfLines
SubName = .ProcOfLine(lngCurrentLine, 0)
If InStr(SubName, [A1]) > 0 Then
Application.Run SubName
Exit Sub
End If
lngCurrentLine = .ProcStartLine(SubName, 0) + _
.ProcCountLines(SubName, 0) + 1
Loop
End With
End If
Next cpCurrent
MsgBox "No Values Found Matching Value"
End Sub