在Excel VBA中通过单元格中的通配符调用宏

时间:2014-01-16 16:56:11

标签: excel vba excel-vba wildcard

我目前在Excel中有一个组合框,该组合框分配给单独工作表上的“宏列表”,该工作表列出了大约200种不同的宏。搜索下拉列表以获取您想要选择的宏(它们是按数字顺序排列,所以它不是太糟糕)有时候很简单,但我认为这可能会更好。

大多数宏以这种方式构建“PA1111_Name” - 我想要的是允许用户在单元格中输入1111并按下指向上述宏的“运行”按钮。在SQL中它将是这样的:

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

这些数字是唯一的,所以我不关心抓取多个宏的可能性。

谢谢!

1 个答案:

答案 0 :(得分:2)

以下将遍历Active VBProject的Mapping Module中的所有宏并测试以查看Name是否包含在A1中找到的值,如果是,它将运行该宏,如果没有找到它将显示No Macro的Found Matching输入值。

请记住,这只会运行它找到的第一个宏,其中包含Value,因为我假设您在宏名称中没有重复值。

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