使用Excel VBA中的单元格中的通配符调用macros

我目前在Excel中有一个combobox被分配到一个单独的工作表上有一个“macros列表”,其中列出了大约200个不同的macros。 有时候可以通过search下拉列表来获得你想要select的macros(它们是按照数字顺序排列的,所以它不是太糟糕),但是我认为这可能会更好。

大多数macros的结构是这样的“PA1111_Name” – 我想要的是允许用户在单元格中input1111,然后按下一个指向上述macros的“运行”button。 在SQL中,它会是这样的:

SELECT Macro FROM Module WHERE Macro Like '*' & Cell.A2 & '*' 

这些数字是独一无二的,所以我不关心抓取多个macros的可能性。

谢谢!

下面将通过活动VBProject的映射模块内的所有macros并testing以查看名称是否包含在A1中find的值,如果它确实会运行该macros,如果没有find它显示没有macros的find匹配input值。

记住这只会运行它所包含的第一个macros,因为我假设你没有macros名称中的重复值。

 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